diff --git a/.windsurfrules b/.windsurfrules index a241965e..ec918974 100644 --- a/.windsurfrules +++ b/.windsurfrules @@ -1,16 +1,17 @@ 你是一名java前端开发工程师,对你有以下要求 -1. 缺陷修正: +1. 一直说中文 +2. 缺陷修正: - 在提出修复建议前,应充分分析问题 - 提供精准、有针对性的解决方案 - 解释bug的根本原因 -2. 保持简单: +3. 保持简单: - 优先考虑可读性和可维护性 - 避免过度工程化的解决方案 - 尽可能使用标准库和模式 - 遵循正确、最佳实践、DRY原则、无错误、功能齐全的代码编写原则 -3. 代码更改: +4. 代码更改: - 在做出改变之前提出一个清晰的计划 - 一次将所有修改应用于单个文件 - 请勿修改不相关的文件 diff --git a/frontend/.windsurfrules b/frontend/.windsurfrules index 4c9ca183..3b6c2946 100644 --- a/frontend/.windsurfrules +++ b/frontend/.windsurfrules @@ -1,21 +1,159 @@ -你是一名java前端开发工程师,对你有以下要求 -1. 缺陷修正: -- 在提出修复建议前,应充分分析问题 -- 提供精准、有针对性的解决方案 -- 解释bug的根本原因 +你是一名高级前端开发人员,是ReactJS, NextJS, JavaScript, TypeScript, HTML, CSS和现代UI/UX框架(例如,TailwindCSS, Shadcn, Radix)的专家。你深思熟虑,给出细致入微的答案,并且善于推理。你细心地提供准确、真实、深思熟虑的答案,是推理的天才。 +# 严格遵循的要求 +- 不要随意删除代码,请先详细浏览下现在所有的代码,再进行询问修改,得到确认再修改。重点切记 +- 首先,一步一步地思考——详细描述你在伪代码中构建什么的计划。 +- 确认,然后写代码! +- 始终编写正确、最佳实践、DRY原则(不要重复自己)、无错误、功能齐全且可工作的代码,还应与下面代码实施指南中列出的规则保持一致。 +- 专注于简单易读的代码,而不是高性能。 +- 完全实现所有要求的功能。 +- 不要留下待办事项、占位符或缺失的部分。 +- 确保代码完整!彻底确认。 +- 包括所有必需的导入的包,并确保关键组件的正确命名。 +- 如果你认为可能没有正确答案,你就说出来。 +- 如果你不知道答案,就说出来,而不是猜测。 +- 可以提出合理化的建议,但是需要等待是否可以。 +- 对于新设计的实体类、字段、方法都要写注释,对于实际的逻辑要有逻辑注释。 +- 不要随意修改现在的接口调用路径,如果不知道接口是什么,可以问。 +#代码实现指南 +在编写代码时遵循以下规则: +- 尽可能使用早期返回,使代码更具可读性。 +- 总是使用顺风类样式HTML元素;避免使用CSS或标签。 +- 尽可能在类标记中使用“ class: ”而不是第三操作符。 +- 使用描述性变量名和函数/const名。此外,事件函数应该以“handle”前缀命名,就像onClick的“handleClick”和onKeyDown的“handleKeyDown”。 +- 在元素上实现可访问性特性。例如,一个标签应该有tabindex= " 0 "、aria-label、on:click和on:keydown以及类似的属性。 +— 使用const代替函数,例如:const toggle =() =>。另外,如果可能的话,定义一个类型。 -2. 保持简单: -- 优先考虑可读性和可维护性 -- 避免过度工程化的解决方案 -- 尽可能使用标准库和模式 -- 遵循正确、最佳实践、DRY原则、无错误、功能齐全的代码编写原则 +# Deploy Ease Platform 前端开发规范 -3. 代码更改: -- 在做出改变之前提出一个清晰的计划 -- 一次将所有修改应用于单个文件 -- 请勿修改不相关的文件 +## 1. 项目结构规范 -4. 代码注释: -- 尽量都编写代码注释,写明实现的方式 +``` +src/ +├── components/ # 公共组件 +├── pages/ # 页面组件 +│ └── System/ # 系统管理模块 +├── layouts/ # 布局组件 +├── router/index.ts # 路由配置 +├── store/ # 状态管理 +├── services/ # API 服务 +├── utils/ # 工具函数 +├── hooks/ # 自定义 Hooks +└── types/ # TS 类型定义 +│ └── pages.ts # 分页基础类 -记住要始终考虑每个项目的背景和特定需求。 \ No newline at end of file +ModuleName/ # 模块结构 +├── components/ # 模块私有组件 +├── type.ts # 类型定义 +├── service.ts # API 服务 +└── index.tsx # 模块入口 +``` + +## 2. 命名与类型规范 + +1. 文件命名: + - 组件:PascalCase(`UserProfile.tsx`) + - 工具函数:camelCase(`formatDate.ts`) + - 样式:组件同名(`UserProfile.module.css`) + - Redux:`xxxSlice.ts` + - 类型:`types.ts` + - 服务:`service.ts` + +2. 变量命名: + - 常量:UPPER_SNAKE_CASE + - 变量:camelCase + - 接口:以 `I` 开头,PascalCase + - 类型:以 `T` 开头,PascalCase + - 事件处理:`handle` 前缀 + - 异步函数:动词开头(`fetchData`) + +3. 要使用和继承定义了基础类型src\types\base.ts + +## 3. 服务层规范 + +1. 方法定义: + ```typescript + // 推荐写法 - 使用 request 工具 + export const resetPassword = (id: number, password: string) => + request.post(`/api/v1/users/${id}/reset-password`, { password }); + + // 标准 CRUD 接口 + export const getList = (params?: Query) => + request.get>('/api/v1/xxx/page', { params }); // 列表接口统一使用 /page 后缀 + + export const create = (data: Request) => + request.post('/api/v1/xxx', data); + + export const update = (id: number, data: Request) => + request.put(`/api/v1/xxx/${id}`, data); + + export const remove = (id: number) => + request.delete(`/api/v1/xxx/${id}`); + + export const batchRemove = (ids: number[]) => + request.post('/api/v1/xxx/batch-delete', { ids }); + + export const exportData = (params?: Query) => + request.download('/api/v1/xxx/export', undefined, { params }); + ``` + +2. 规范要点: + - 统一使用 src\utils\request.ts + - 使用泛型指定响应数据类型 + - 错误处理在拦截器中统一处理 + - 使用模板字符串拼接路径 + - API 路径使用 `/api/v1/` 前缀 + - 资源使用复数形式(users, roles) + - 特殊操作使用动词(export, import) + +3. 列表数据获取规范: + - API 路径必须以 `/page` 结尾,例如:`/api/v1/workflow-definitions/page` + - 服务层方法定义示例: + ```typescript + export const getDefinitions = (params?: WorkflowDefinitionQuery) => + request.get>(`${DEFINITION_URL}/page`, { params }); + ``` + - 组件中获取列表数据: + ```typescript + const response = await getDefinitions(); + if (response) { + setList(response.content); // 使用 response.content 获取列表数据 + } + ``` + - 分页数据结构统一使用 `Page` 类型 + - 列表数据必须位于返回结果的 `content` 字段中 + +## 4. 类型处理规则: + - request 工具的泛型参数 T 表示业务数据类型 + - 响应拦截器负责从 Response 中提取 data + - 服务方法直接使用业务数据类型作为泛型参数 + - 组件中可以直接使用返回的业务数据 + - TypeScript 类型系统能正确推断类型 + +## 5. React 开发规范 + +1. 组件开发: + - 使用函数组件和箭头函数 + - Props 类型必须定义 + - 必须提供默认值 + - 使用 memo 优化 + - 复杂组件需拆分 + +2. Hooks 使用: + - 自定义 hooks 以 `use` 开头 + - 使用 TypeScript 泛型 + - 使用 useCallback 和 useMemo + - 使用 Promise.all 处理并行请求 + +3. 状态管理: + - 使用 Redux Toolkit + - 持久化数据存储在 localStorage + - Token、用户信息、菜单统一管理 + +## 6. 样式与布局规范 + +1. CSS 规范: + - 使用 CSS Modules + - 类名使用 kebab-case + - 避免内联样式 + - 响应式适配 + - 支持暗色主题 \ No newline at end of file diff --git a/frontend/frontend-guide.md b/frontend/frontend-guide.md deleted file mode 100644 index 6baf8cf6..00000000 --- a/frontend/frontend-guide.md +++ /dev/null @@ -1,332 +0,0 @@ -# 工作流数据格式说明 - -## 1. 节点类型数据示例 - -```json -{ - "id": 2003, - "createTime": "2024-12-05 12:40:03", - "createBy": "system", - "updateTime": "2024-12-05 12:40:03", - "updateBy": "system", - "version": 1, - "deleted": false, - "extraData": null, - "code": "SHELL", - "name": "Shell脚本节点", - "description": "执行Shell脚本的任务节点", - "category": "TASK", - "icon": "code", - "color": "#1890ff", - "executors": [ - { - "code": "SHELL", - "name": "Shell脚本执行器", - "description": "执行Shell脚本,支持配置超时时间和工作目录", - "configSchema": "{\"type\":\"object\",\"required\":[\"script\"],\"properties\":{\"script\":{\"type\":\"string\",\"title\":\"脚本内容\",\"format\":\"shell\",\"description\":\"需要执行的Shell脚本内容\"},\"timeout\":{\"type\":\"number\",\"title\":\"超时时间\",\"description\":\"脚本执行的最大时间(秒)\",\"minimum\":1,\"maximum\":3600,\"default\":300},\"workingDir\":{\"type\":\"string\",\"title\":\"工作目录\",\"description\":\"脚本执行的工作目录\",\"default\":\"/tmp\"}}}", - "defaultConfig": null - } - ], - "configSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"title\": \"节点名称\",\n \"minLength\": 1,\n \"maxLength\": 50\n },\n \"description\": {\n \"type\": \"string\",\n \"title\": \"节点描述\",\n \"maxLength\": 200\n },\n \"executor\": {\n \"type\": \"string\",\n \"title\": \"执行器\",\n \"enum\": [\"SHELL\"],\n \"enumNames\": [\"Shell脚本执行器\"]\n },\n \"retryTimes\": {\n \"type\": \"number\",\n \"title\": \"重试次数\",\n \"minimum\": 0,\n \"maximum\": 3,\n \"default\": 0\n },\n \"retryInterval\": {\n \"type\": \"number\",\n \"title\": \"重试间隔(秒)\",\n \"minimum\": 1,\n \"maximum\": 300,\n \"default\": 60\n }\n },\n \"required\": [\"name\", \"executor\"]\n}", - "defaultConfig": "{\"name\": \"Shell脚本\", \"executor\": \"SHELL\", \"retryTimes\": 0, \"retryInterval\": 60}", - "enabled": true -} -``` - -## 2. 流程设计数据示例 - -```json -{ - "nodes": [ - { - "id": "node_1", - "type": "START", - "position": { "x": 100, "y": 100 }, - "data": { - "name": "开始", - "description": "流程开始节点", - "config": { - "name": "开始", - "description": "这是一个开始节点" - } - } - } - ], - "edges": [ - { - "id": "edge_1", - "source": "node_1", - "target": "node_2", - "type": "default", - "data": { - "condition": null - } - } - ] -} -``` - -## 3. 关键字段说明 - -### configSchema(节点配置模式) -**用途**: -1. 前端动态生成配置表单 -2. 后端验证配置数据的合法性 -3. 提供配置项的约束和验证规则 - -### defaultConfig(默认配置) -**用途**: -1. 新建节点时的默认值 -2. 重置配置时的参考值 -3. 必须符合configSchema定义的格式 - -### executors(执行器定义) -**用途**: -1. 定义节点支持的执行器类型 -2. 每个执行器的配置要求 -3. 用于任务节点的具体执行逻辑 - -## 4. 字段关系说明 - -1. configSchema定义节点的整体配置结构 -2. defaultConfig提供符合configSchema的默认值 -3. executors中的configSchema定义具体执行器的配置结构 -4. 实际节点配置时,executorConfig需要符合选定执行器的configSchema - -## 5. 前端实现指南 - -### 5.1 工作流设计器组件架构 - -推荐使用组件化设计,主要包含以下组件: - -1. **WorkflowDesigner(工作流设计器)** - - 整体容器组件 - - 负责状态管理 - - 处理快捷键 - - 工具栏集成 - -2. **NodePanel(节点面板)** - - 显示可用节点类型 - - 支持拖拽创建节点 - - 节点分类展示 - -3. **Canvas(画布)** - - 节点和连线的可视化 - - 处理拖拽和连线 - - 网格背景 - - 缩放和平移 - -4. **NodeConfig(节点配置)** - - 动态表单生成 - - 配置验证 - - 实时预览 - -### 5.2 接口说明 - -#### 5.2.1 节点类型接口 -```typescript -// 获取节点类型列表 -GET /api/v1/node-types -Response: { - code: number; - data: NodeType[]; - message: string; -} - -// 获取单个节点类型详情 -GET /api/v1/node-types/{id} -Response: { - code: number; - data: NodeType; - message: string; -} -``` - -#### 5.2.2 工作流设计接口 -```typescript -// 保存工作流设计 -POST /api/v1/workflows/{id}/design -Request: { - nodes: Node[]; - edges: Edge[]; -} -Response: { - code: number; - data: boolean; - message: string; -} - -// 获取工作流设计 -GET /api/v1/workflows/{id}/design -Response: { - code: number; - data: { - nodes: Node[]; - edges: Edge[]; - }; - message: string; -} -``` - -### 5.3 节点连线实现 - -#### 5.3.1 连接点(Anchors) -每种类型节点的连接点定义: -```typescript -interface NodeAnchor { - id: string; - type: 'input' | 'output'; - position: 'top' | 'right' | 'bottom' | 'left'; - allowMultiple?: boolean; // 是否允许多条连线 -} - -const nodeAnchors = { - START: [ - { id: 'output', type: 'output', position: 'bottom', allowMultiple: true } - ], - END: [ - { id: 'input', type: 'input', position: 'top', allowMultiple: false } - ], - TASK: [ - { id: 'input', type: 'input', position: 'top', allowMultiple: false }, - { id: 'output', type: 'output', position: 'bottom', allowMultiple: true } - ], - GATEWAY: [ - { id: 'input', type: 'input', position: 'top', allowMultiple: false }, - { id: 'output', type: 'output', position: 'bottom', allowMultiple: true } - ] -}; -``` - -#### 5.3.2 连线验证规则 -```typescript -interface ConnectionValidation { - sourceNode: Node; - targetNode: Node; - sourceAnchor: NodeAnchor; - targetAnchor: NodeAnchor; -} - -function validateConnection({ - sourceNode, - targetNode, - sourceAnchor, - targetAnchor -}: ConnectionValidation): boolean { - // 1. 检查源节点和目标节点是否有效 - if (!sourceNode || !targetNode) return false; - - // 2. 检查是否形成循环 - if (wouldCreateCycle(sourceNode, targetNode)) return false; - - // 3. 检查锚点类型匹配 - if (sourceAnchor.type !== 'output' || targetAnchor.type !== 'input') return false; - - // 4. 检查目标锚点是否已被占用(如果不允许多重连接) - if (!targetAnchor.allowMultiple && hasExistingConnection(targetNode, targetAnchor)) { - return false; - } - - return true; -} -``` - -#### 5.3.3 连线样式配置 -```typescript -const edgeStyles = { - default: { - type: 'smoothstep', // 平滑阶梯线 - animated: false, - style: { - stroke: '#b1b1b7', - strokeWidth: 2 - } - }, - selected: { - style: { - stroke: '#1890ff', - strokeWidth: 2 - } - }, - conditional: { - type: 'smoothstep', - animated: true, - style: { - stroke: '#722ed1', - strokeWidth: 2, - strokeDasharray: '5,5' - } - } -}; -``` - -### 5.4 状态管理建议 - -推荐使用状态管理库(如Redux或MobX)管理以下状态: - -1. **全局状态** - - 当前工作流设计 - - 可用节点类型 - - 画布缩放级别 - - 选中的节点/连线 - -2. **节点状态** - - 位置信息 - - 配置数据 - - 验证状态 - -3. **连线状态** - - 连接关系 - - 条件配置 - - 样式信息 - -### 5.5 性能优化建议 - -1. **渲染优化** - - 使用React.memo()优化节点渲染 - - 实现虚拟滚动 - - 大量节点时使用分层渲染 - -2. **状态更新优化** - - 批量更新状态 - - 使用不可变数据结构 - - 实现节点位置的防抖 - -3. **交互优化** - - 拖拽时使用节点预览 - - 连线时显示对齐参考线 - - 支持快捷键操作 - -### 5.6 错误处理 - -1. **前端验证** - - 节点配置验证 - - 连线规则验证 - - 数据完整性检查 - -2. **错误提示** - - 友好的错误信息 - - 错误定位高亮 - - 操作建议提示 - -3. **异常恢复** - - 自动保存 - - 操作撤销/重做 - - 状态恢复机制 - -## 6. 最佳实践建议 - -1. **代码组织** - - 使用TypeScript确保类型安全 - - 遵循组件设计原则 - - 实现完整的测试覆盖 - -2. **用户体验** - - 实现撤销/重做功能 - - 支持键盘快捷键 - - 添加操作引导 - -3. **可扩展性** - - 支持自定义节点 - - 支持自定义连线样式 - - 预留扩展接口 \ No newline at end of file diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 00000000..280db874 --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,4869 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ant-design/icons': + specifier: ^5.2.6 + version: 5.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@antv/layout': + specifier: ^1.2.14-beta.8 + version: 1.2.14-beta.8(workerize-loader@2.0.2(webpack@5.97.1)) + '@antv/x6': + specifier: ^2.18.1 + version: 2.18.1 + '@antv/x6-plugin-clipboard': + specifier: ^2.1.6 + version: 2.1.6(@antv/x6@2.18.1) + '@antv/x6-plugin-export': + specifier: ^2.1.6 + version: 2.1.6(@antv/x6@2.18.1) + '@antv/x6-plugin-history': + specifier: ^2.2.4 + version: 2.2.4(@antv/x6@2.18.1) + '@antv/x6-plugin-keyboard': + specifier: ^2.2.3 + version: 2.2.3(@antv/x6@2.18.1) + '@antv/x6-plugin-minimap': + specifier: ^2.0.7 + version: 2.0.7(@antv/x6@2.18.1) + '@antv/x6-plugin-selection': + specifier: ^2.2.2 + version: 2.2.2(@antv/x6@2.18.1) + '@antv/x6-plugin-snapline': + specifier: ^2.1.7 + version: 2.1.7(@antv/x6@2.18.1) + '@antv/x6-plugin-transform': + specifier: ^2.1.8 + version: 2.1.8(@antv/x6@2.18.1) + '@antv/x6-react-shape': + specifier: ^2.2.3 + version: 2.2.3(@antv/x6@2.18.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@logicflow/core': + specifier: ^2.0.9 + version: 2.0.9 + '@logicflow/extension': + specifier: ^2.0.13 + version: 2.0.13(@logicflow/core@2.0.9) + '@reduxjs/toolkit': + specifier: ^2.0.1 + version: 2.5.0(react-redux@9.2.0(@types/react@18.3.16)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + ajv: + specifier: ^8.17.1 + version: 8.17.1 + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) + antd: + specifier: ^5.22.2 + version: 5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + axios: + specifier: ^1.6.2 + version: 1.7.9 + dagre: + specifier: ^0.8.5 + version: 0.8.5 + form-render: + specifier: ^2.5.1 + version: 2.5.1(@types/react@18.3.16)(antd@5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-diff-viewer-continued: + specifier: ^3.4.0 + version: 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-redux: + specifier: ^9.0.4 + version: 9.2.0(@types/react@18.3.16)(react@18.3.1)(redux@5.0.1) + react-router-dom: + specifier: ^6.21.0 + version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + devDependencies: + '@types/dagre': + specifier: ^0.7.52 + version: 0.7.52 + '@types/node': + specifier: ^20.10.4 + version: 20.17.10 + '@types/react': + specifier: ^18.2.43 + version: 18.3.16 + '@types/react-dom': + specifier: ^18.2.17 + version: 18.3.5(@types/react@18.3.16) + '@typescript-eslint/eslint-plugin': + specifier: ^6.14.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/parser': + specifier: ^6.14.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.3.4(vite@5.4.11(@types/node@20.17.10)(less@4.2.1)(terser@5.37.0)) + eslint: + specifier: ^8.55.0 + version: 8.57.1 + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.2(eslint@8.57.1) + eslint-plugin-react-refresh: + specifier: ^0.4.5 + version: 0.4.16(eslint@8.57.1) + less: + specifier: ^4.2.1 + version: 4.2.1 + typescript: + specifier: ^5.3.3 + version: 5.7.2 + vite: + specifier: ^5.0.8 + version: 5.4.11(@types/node@20.17.10)(less@4.2.1)(terser@5.37.0) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@ant-design/colors@6.0.0': + resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==} + + '@ant-design/colors@7.1.0': + resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==} + + '@ant-design/cssinjs-utils@1.1.3': + resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@ant-design/cssinjs@1.22.1': + resolution: {integrity: sha512-SLuXM4wiEE1blOx94iXrkOgseMZHzdr4ngdFu3VVDq6AOWh7rlwqTkMAtJho3EsBF6x/eUGOtK53VZXGQG7+sQ==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.4.2': + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} + + '@ant-design/icons@4.8.3': + resolution: {integrity: sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/icons@5.5.2': + resolution: {integrity: sha512-xc53rjVBl9v2BqFxUjZGti/RfdDeA8/6KYglmInM2PNqSXc/WfuGDTifJI/ZsokJK0aeKvOIbXc9y2g8ILAhEA==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/react-slick@1.1.2': + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} + peerDependencies: + react: '>=16.9.0' + + '@antv/event-emitter@0.1.3': + resolution: {integrity: sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==} + + '@antv/graphlib@2.0.4': + resolution: {integrity: sha512-zc/5oQlsdk42Z0ib1mGklwzhJ5vczLFiPa1v7DgJkTbgJ2YxRh9xdarf86zI49sKVJmgbweRpJs7Nu5bIiwv4w==} + + '@antv/hierarchy@0.6.14': + resolution: {integrity: sha512-V3uknf7bhynOqQDw2sg+9r9DwZ9pc6k/EcqyTFdfXB1+ydr7urisP0MipIuimucvQKN+Qkd+d6w601r1UIroqQ==} + + '@antv/layout@1.2.14-beta.8': + resolution: {integrity: sha512-/zP8pRz28ahYSVk4fsfhl3T1X3FvCAi7Q3YQ8H2LZEvTojYYrJtO2AXFsojehU6HGVnIAq+QIjd3He6ot8+gvA==} + + '@antv/util@3.3.10': + resolution: {integrity: sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ==} + + '@antv/x6-common@2.0.17': + resolution: {integrity: sha512-37g7vmRkNdYzZPdwjaMSZEGv/MMH0S4r70/Jwoab1mioycmuIBN73iyziX8m56BvJSDucZ3J/6DU07otWqzS6A==} + + '@antv/x6-geometry@2.0.5': + resolution: {integrity: sha512-MId6riEQkxphBpVeTcL4ZNXL4lScyvDEPLyIafvWMcWNTGK0jgkK7N20XSzqt8ltJb0mGUso5s56mrk8ysHu2A==} + + '@antv/x6-plugin-clipboard@2.1.6': + resolution: {integrity: sha512-roZPLnZx6PK8MBvee0QMo90fz/TXeF0WNe4EGin2NBq5M1I5XTWrYvA6N2XVIiWAAI67gjQeEE8TpkL7f8QdqA==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-export@2.1.6': + resolution: {integrity: sha512-m0ukMmZhrFE5n7uCR43DVQBdiUfpjGN+vm1mc+6RTZdHK8pa6Mxr0RZztaxPy34YA4tli+bGY3ePslsNPfh6PQ==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-history@2.2.4': + resolution: {integrity: sha512-9gHHvEW4Fla+1hxUV49zNgJyIMoV9CjVM52MrFgAJcvyRn1Kvxz4MfxiKlG+DEZUs+/zvfjl9pS6gJOd8laRkg==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-keyboard@2.2.3': + resolution: {integrity: sha512-pnCIC+mDyKKfkcDyLePfGxKVIqXBcldTgannITkHC1kc0IafRS1GMvzpvuDGrM5haRYd6Nwz8kjkJyHkJE4GPA==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-minimap@2.0.7': + resolution: {integrity: sha512-8zzESCx0jguFPCOKCA0gPFb6JmRgq81CXXtgJYe34XhySdZ6PB23I5Po062lNsEuTjTjnzli4lju8vvU+jzlGw==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-selection@2.2.2': + resolution: {integrity: sha512-s2gtR9Onlhr7HOHqyqg0d+4sG76JCcQEbvrZZ64XmSChlvieIPlC3YtH4dg1KMNhYIuBmBmpSum6S0eVTEiPQw==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-snapline@2.1.7': + resolution: {integrity: sha512-AsysoCb9vES0U2USNhEpYuO/W8I0aYfkhlbee5Kt4NYiMfQfZKQyqW/YjDVaS2pm38C1NKu1LdPVk/BBr4CasA==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-plugin-transform@2.1.8': + resolution: {integrity: sha512-GvJuiJ4BKp0H7+qx3R1I+Vzbw5gXp9+oByXo/WyVxE3urOC7LC5sqnaDfIjyYMN6ROLPYPZraLSeSyYBgMgcDw==} + peerDependencies: + '@antv/x6': ^2.x + + '@antv/x6-react-shape@2.2.3': + resolution: {integrity: sha512-42PGxk3XLnx9bsHQiRPauai5UQCrsh0MbWI3MyHRpjQaC30FK1rqyjH/EJ8qH0p6/cAndszZzCaiPqBbs3FqLQ==} + peerDependencies: + '@antv/x6': ^2.x + react: '>=18.0.0' + react-dom: '>= 18.0.0' + + '@antv/x6@2.18.1': + resolution: {integrity: sha512-FkWdbLOpN9J7dfJ+kiBxzowSx2N6syBily13NMVdMs+wqC6Eo5sLXWCZjQHateTFWgFw7ZGi2y9o3Pmdov1sXw==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/css@11.13.5': + resolution: {integrity: sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==} + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@logicflow/core@2.0.9': + resolution: {integrity: sha512-HRc3W+XbcXbq9E3wElFNkaxNBja7Ga+FK6LYbsoOGWDWzZ7gSBCaYTpKPUlQsfUK0EvztqzCuer2DRJQQ77Ylg==} + + '@logicflow/extension@2.0.13': + resolution: {integrity: sha512-1csZP2RYyGItvOMxVSpzrP7MguPrMRQYV+PUbm+8jZLrFbt3LcOQCNdHsEFU0cfuaiBF6Nx4qBdBeo0kog0eCw==} + peerDependencies: + '@logicflow/core': 2.0.9 + + '@naoak/workerize-transferable@0.1.0': + resolution: {integrity: sha512-fDLfuP71IPNP5+zSfxFb52OHgtjZvauRJWbVnpzQ7G7BjcbLjTny0OW1d3ZO806XKpLWNKmeeW3MhE0sy8iwYQ==} + peerDependencies: + workerize-loader: '*' + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rc-component/async-validator@5.0.4': + resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} + engines: {node: '>=14.x'} + + '@rc-component/color-picker@2.0.1': + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/context@1.4.0': + resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.0': + resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + engines: {node: '>=8.x'} + + '@rc-component/mutate-observer@1.1.0': + resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/portal@1.1.2': + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/qrcode@1.0.0': + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tour@1.15.1': + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/trigger@2.2.6': + resolution: {integrity: sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@reduxjs/toolkit@2.5.0': + resolution: {integrity: sha512-awNe2oTodsZ6LmRqmkFhtb/KH03hUhxOamEQy411m3Njj3BbFvoBovxo4Q1cBWnV1ErprVj9MlF0UPXkng0eyg==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + + '@remix-run/router@1.21.0': + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} + engines: {node: '>=14.0.0'} + + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + cpu: [x64] + os: [win32] + + '@sphinxxxx/color-conversion@2.2.2': + resolution: {integrity: sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/dagre@0.7.52': + resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@20.17.10': + resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.16': + resolution: {integrity: sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + add-dom-event-listener@1.1.0: + resolution: {integrity: sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==} + + ahooks@3.8.4: + resolution: {integrity: sha512-39wDEw2ZHvypaT14EpMMk4AzosHWt0z9bulY0BeDsvc9PqJEV+Kjh/4TZfftSsotBMq52iYIOFPd3PR56e0ZJg==} + engines: {node: '>=8.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + antd@5.22.4: + resolution: {integrity: sha512-hkYvDgCKiYb7hF+4FNTDup+ZWnHodTl2eoD1x6m5MXnCg3R9OLfhD9aB7IxjtJ20xO70xOsolMfXgpf/h0cVbw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + async-validator@3.5.2: + resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comlink@4.4.2: + resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + component-classes@1.2.6: + resolution: {integrity: sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==} + + component-indexof@0.0.3: + resolution: {integrity: sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==} + + compute-scroll-into-view@3.1.0: + resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + create-react-class@15.7.0: + resolution: {integrity: sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-animation@1.6.1: + resolution: {integrity: sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + d3-binarytree@1.0.2: + resolution: {integrity: sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-force-3d@3.0.5: + resolution: {integrity: sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-octree@1.0.2: + resolution: {integrity: sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + dagre@0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-align@1.12.4: + resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} + + electron-to-chromium@1.5.73: + resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react-refresh@0.4.16: + resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + form-render@2.5.1: + resolution: {integrity: sha512-oNbJ+McqB5h1yuyxYAT3ixJF8itmHlnKvqDgQhJT9Tw1c3yGwfRnVXboRxBV+Myz0dkf47zL6lyY1l74yQsWsg==} + peerDependencies: + antd: 4.x || 5.x + react: '>=16.9.0' + react-dom: '>=16.9.0' + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + gl-matrix@3.4.3: + resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@2.5.5: + resolution: {integrity: sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + intersection-observer@0.12.2: + resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + + is-any-array@2.0.1: + resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + less@4.2.1: + resolution: {integrity: sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==} + engines: {node: '>=6'} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + medium-editor@5.23.3: + resolution: {integrity: sha512-he9/TdjX8f8MGdXGfCs8AllrYnqXJJvjNkDKmPg3aPW/uoIrlRqtkFthrwvmd+u4QyzEiadhCCM0EwTiRdUCJw==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + ml-array-max@1.2.4: + resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==} + + ml-array-min@1.2.3: + resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==} + + ml-array-rescale@1.3.7: + resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==} + + ml-matrix@6.12.0: + resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==} + + mobx-preact@3.0.0: + resolution: {integrity: sha512-ijan/cBs3WmRye87E5+3JmoFBB00KDAwNA3pm7bMwYLPHBAXlN86aC3gdrXw8aKzM5RI8V3a993PphzPv6P4FA==} + peerDependencies: + mobx: 5.x + preact: '>=8' + + mobx-utils@5.6.2: + resolution: {integrity: sha512-a/WlXyGkp6F12b01sTarENpxbmlRgPHFyR1Xv2bsSjQBm5dcOtd16ONb40/vOqck8L99NHpI+C9MXQ+SZ8f+yw==} + peerDependencies: + mobx: ^4.13.1 || ^5.13.1 + + mobx@5.15.7: + resolution: {integrity: sha512-wyM3FghTkhmC+hQjyPGGFdpehrcX1KOXsDuERhfK2YbJemkUhEB+6wzEN639T21onxlfYBmriA1PFnvxTUhcKw==} + + mousetrap@1.6.5: + resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + preact@10.25.1: + resolution: {integrity: sha512-frxeZV2vhQSohQwJ7FvlqC40ze89+8friponWUFeVEkaCfhC6Eu4V0iND5C9CXz8JLndV07QRDeXzH1+Anz5Og==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + rangy@1.3.2: + resolution: {integrity: sha512-fS1C4MOyk8T+ZJZdLcgrukPWxkyDXa+Hd2Kj+Zg4wIK71yrWgmjzHubzPMY1G+WD9EgGxMp3fIL0zQ1ickmSWA==} + + rc-align@2.4.5: + resolution: {integrity: sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==} + + rc-animate@2.11.1: + resolution: {integrity: sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-cascader@3.30.0: + resolution: {integrity: sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-checkbox@3.3.0: + resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-collapse@3.9.0: + resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-color-picker@1.2.6: + resolution: {integrity: sha512-AaC9Pg7qCHSy5M4eVbqDIaNb2FC4SEw82GOHB2C4R/+vF2FVa/r5XA+Igg5+zLPmAvBLhz9tL4MAfkRA8yWNJw==} + peerDependencies: + react: 16.x + react-dom: 16.x + + rc-dialog@9.6.0: + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-drawer@7.2.0: + resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dropdown@4.2.1: + resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + + rc-field-form@2.6.0: + resolution: {integrity: sha512-qU7ei+G/nZ5nkx7TFLRoPtcMR0s0R0yG/2O+iWqA/CX65tJmgODpJvTYYzGMPW/Psj+gy5QHbcZUrNVcPXKjLQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-image@7.11.0: + resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input-number@9.3.0: + resolution: {integrity: sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input@1.6.4: + resolution: {integrity: sha512-lBZhfRD4NSAUW0zOKLUeI6GJuXkxeZYi0hr8VcJgJpyTNOvHw1ysrKWAHcEOAAHj7guxgmWYSi6xWrEdfrSAsA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-mentions@2.17.0: + resolution: {integrity: sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-menu@9.16.0: + resolution: {integrity: sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-motion@2.9.4: + resolution: {integrity: sha512-TAPUUufDqhPO669qJobI0d9U0XZ/VPNQyZTivUxxzU1EyuPe3PtHSx7Kb902KuzQgu7sS18z8GguaxZEALV/ww==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-notification@5.6.2: + resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-overflow@1.3.2: + resolution: {integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-pagination@4.3.0: + resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-picker@4.8.3: + resolution: {integrity: sha512-hJ45qoEs4mfxXPAJdp1n3sKwADul874Cd0/HwnsEOE60H+tgiJUGgbOD62As3EG/rFVNS5AWRfBCDJJfmRqOVQ==} + engines: {node: '>=8.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + rc-progress@4.0.0: + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-rate@2.13.0: + resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-resize-observer@1.4.1: + resolution: {integrity: sha512-JbAeFDsaaZRPwaTlXnCqgeO9c6E7qoaE/hxsub08cdnnPn6767c/j9+r/TifUdfvwXtdcfHygKbZ7ecM/PXo/Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-segmented@2.5.0: + resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-select@14.16.4: + resolution: {integrity: sha512-jP6qf7+vjnxGvPpfPWbGYfFlSl3h8L2XcD4O7g2GYXmEeBC0mw+nPD7i++OOE8v3YGqP8xtYjRKAWCMLfjgxlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-slider@11.1.7: + resolution: {integrity: sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-steps@6.0.1: + resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-switch@4.1.0: + resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-table@7.49.0: + resolution: {integrity: sha512-/FoPLX94muAQOxVpi1jhnpKjOIqUbT81eELQPAzSXOke4ky4oCWYUXOcVpL31ZCO90xScwVSXRd7coqtgtB1Ng==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tabs@15.4.0: + resolution: {integrity: sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-textarea@1.8.2: + resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tooltip@6.2.1: + resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tree-select@5.24.5: + resolution: {integrity: sha512-PnyR8LZJWaiEFw0SHRqo4MNQWyyZsyMs8eNmo68uXZWjxc7QqeWcjPPoONN0rc90c3HZqGF9z+Roz+GLzY5GXA==} + peerDependencies: + react: '*' + react-dom: '*' + + rc-tree@5.10.1: + resolution: {integrity: sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-trigger@1.11.5: + resolution: {integrity: sha512-MBuUPw1nFzA4K7jQOwb7uvFaZFjXGd00EofUYiZ+l/fgKVq8wnLC0lkv36kwqM7vfKyftRo2sh7cWVpdPuNnnw==} + + rc-upload@4.8.1: + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-util@4.21.1: + resolution: {integrity: sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==} + + rc-util@5.44.1: + resolution: {integrity: sha512-h6z91oGfWJPZgunkFBWSobfL0CkyLeaUNWP1ru7b05GMUSe2uHgTk0EiFEQ11v+zJBrORuXFl6Htf949ZSDdOw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-virtual-list@3.16.0: + resolution: {integrity: sha512-tRpWBC0msU+MxFxnD6+y4v0P17Yzplf+mbiHrqRvfVanx0S4o0XV+2zu4vv7hM9nNfcucO+MPHivqpRT2lfnFQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + react-diff-viewer-continued@3.4.0: + resolution: {integrity: sha512-kMZmUyb3Pv5L9vUtCfIGYsdOHs8mUojblGy1U1Sm0D7FhAOEsH9QhnngEIRo5hXWIPNGupNRJls1TJ6Eqx84eg==} + engines: {node: '>= 8'} + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@6.28.0: + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.28.0: + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + + regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + screenfull@5.2.0: + resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} + engines: {node: '>=0.10.0'} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.37.0: + resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} + engines: {node: '>=10'} + hasBin: true + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + vanilla-picker@2.12.3: + resolution: {integrity: sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==} + + virtualizedtableforantd4@1.3.1: + resolution: {integrity: sha512-rW8KoToI2nt1jNtweXIUIiygi74XMzKLzUrrtZbGsQc7m3v68AaedPuf4CZcte+nosgYuPEWnAgjuI/KR8BVbg==} + peerDependencies: + antd: ^4.0.0 || ^5.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerize-loader@2.0.2: + resolution: {integrity: sha512-HoZ6XY4sHWxA2w0WpzgBwUiR3dv1oo7bS+oCwIpb6n54MclQ/7KXdXsVIChTCygyuHtVuGBO1+i3HzTt699UJQ==} + peerDependencies: + webpack: '*' + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@ant-design/colors@6.0.0': + dependencies: + '@ctrl/tinycolor': 3.6.1 + + '@ant-design/colors@7.1.0': + dependencies: + '@ctrl/tinycolor': 3.6.1 + + '@ant-design/cssinjs-utils@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/cssinjs': 1.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.26.0 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/cssinjs@1.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + stylis: 4.3.4 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.26.0 + + '@ant-design/icons-svg@4.4.2': {} + + '@ant-design/icons@4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + lodash: 4.17.21 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/icons@5.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/colors': 7.1.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ant-design/react-slick@1.1.2(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 18.3.1 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 + + '@antv/event-emitter@0.1.3': {} + + '@antv/graphlib@2.0.4': + dependencies: + '@antv/event-emitter': 0.1.3 + + '@antv/hierarchy@0.6.14': {} + + '@antv/layout@1.2.14-beta.8(workerize-loader@2.0.2(webpack@5.97.1))': + dependencies: + '@antv/event-emitter': 0.1.3 + '@antv/graphlib': 2.0.4 + '@antv/util': 3.3.10 + '@naoak/workerize-transferable': 0.1.0(workerize-loader@2.0.2(webpack@5.97.1)) + comlink: 4.4.2 + d3-force: 3.0.0 + d3-force-3d: 3.0.5 + d3-octree: 1.0.2 + d3-quadtree: 3.0.1 + dagre: 0.8.5 + ml-matrix: 6.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - workerize-loader + + '@antv/util@3.3.10': + dependencies: + fast-deep-equal: 3.1.3 + gl-matrix: 3.4.3 + tslib: 2.8.1 + + '@antv/x6-common@2.0.17': + dependencies: + lodash-es: 4.17.21 + utility-types: 3.11.0 + + '@antv/x6-geometry@2.0.5': {} + + '@antv/x6-plugin-clipboard@2.1.6(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-export@2.1.6(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-history@2.2.4(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-keyboard@2.2.3(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + mousetrap: 1.6.5 + + '@antv/x6-plugin-minimap@2.0.7(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-selection@2.2.2(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-snapline@2.1.7(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-plugin-transform@2.1.8(@antv/x6@2.18.1)': + dependencies: + '@antv/x6': 2.18.1 + + '@antv/x6-react-shape@2.2.3(@antv/x6@2.18.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@antv/x6': 2.18.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@antv/x6@2.18.1': + dependencies: + '@antv/x6-common': 2.0.17 + '@antv/x6-geometry': 2.0.5 + utility-types: 3.11.0 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.3': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.3': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@ctrl/tinycolor@3.6.1': {} + + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/css@11.13.5': + dependencies: + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + transitivePeerDependencies: + - supports-color + + '@emotion/hash@0.8.0': {} + + '@emotion/hash@0.9.2': {} + + '@emotion/memoize@0.9.0': {} + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/unitless@0.7.5': {} + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@logicflow/core@2.0.9': + dependencies: + classnames: 2.5.1 + lodash-es: 4.17.21 + mobx: 5.15.7 + mobx-preact: 3.0.0(mobx@5.15.7)(preact@10.25.1) + mobx-utils: 5.6.2(mobx@5.15.7) + mousetrap: 1.6.5 + preact: 10.25.1 + uuid: 9.0.1 + + '@logicflow/extension@2.0.13(@logicflow/core@2.0.9)': + dependencies: + '@antv/hierarchy': 0.6.14 + '@logicflow/core': 2.0.9 + classnames: 2.5.1 + lodash-es: 4.17.21 + medium-editor: 5.23.3 + mobx: 5.15.7 + preact: 10.25.1 + rangy: 1.3.2 + vanilla-picker: 2.12.3 + + '@naoak/workerize-transferable@0.1.0(workerize-loader@2.0.2(webpack@5.97.1))': + dependencies: + workerize-loader: 2.0.2(webpack@5.97.1) + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rc-component/async-validator@5.0.4': + dependencies: + '@babel/runtime': 7.26.0 + + '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ant-design/fast-color': 2.0.6 + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/mini-decimal@1.1.0': + dependencies: + '@babel/runtime': 7.26.0 + + '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@rc-component/trigger@2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@reduxjs/toolkit@2.5.0(react-redux@9.2.0(@types/react@18.3.16)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': + dependencies: + immer: 10.1.1 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 + optionalDependencies: + react: 18.3.1 + react-redux: 9.2.0(@types/react@18.3.16)(react@18.3.1)(redux@5.0.1) + + '@remix-run/router@1.21.0': {} + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + + '@rollup/rollup-android-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + + '@rollup/rollup-darwin-x64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.28.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.28.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.28.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.28.1': + optional: true + + '@sphinxxxx/color-conversion@2.2.2': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.3 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.3 + + '@types/dagre@0.7.52': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@20.17.10': + dependencies: + undici-types: 6.19.8 + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.14': {} + + '@types/react-dom@18.3.5(@types/react@18.3.16)': + dependencies: + '@types/react': 18.3.16 + + '@types/react@18.3.16': + dependencies: + '@types/prop-types': 15.7.14 + csstype: 3.1.3 + + '@types/semver@7.5.8': {} + + '@types/use-sync-external-store@0.0.6': {} + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.7.2) + debug: 4.4.0 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.2)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.7.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.2) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.1': {} + + '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@20.17.10)(less@4.2.1)(terser@5.37.0))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.11(@types/node@20.17.10)(less@4.2.1)(terser@5.37.0) + transitivePeerDependencies: + - supports-color + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + add-dom-event-listener@1.1.0: + dependencies: + object-assign: 4.1.1 + + ahooks@3.8.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + dayjs: 1.11.13 + intersection-observer: 0.12.2 + js-cookie: 3.0.5 + lodash: 4.17.21 + react: 18.3.1 + react-fast-compare: 3.2.2 + resize-observer-polyfill: 1.5.1 + screenfull: 5.2.0 + tslib: 2.8.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + antd@5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@ant-design/colors': 7.1.0 + '@ant-design/cssinjs': 1.22.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/cssinjs-utils': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/icons': 5.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ant-design/react-slick': 1.1.2(react@18.3.1) + '@babel/runtime': 7.26.0 + '@ctrl/tinycolor': 3.6.1 + '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + copy-to-clipboard: 3.3.3 + dayjs: 1.11.13 + rc-cascader: 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-collapse: 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-field-form: 2.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-input-number: 9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-mentions: 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-notification: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-picker: 4.8.3(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-select: 14.16.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-slider: 11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-table: 7.49.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tabs: 15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree-select: 5.24.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + async-validator@3.5.2: {} + + asynckit@0.4.0: {} + + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.26.0 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + babel-runtime@6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + + balanced-match@1.0.2: {} + + big.js@5.2.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.73 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + buffer-from@1.1.2: {} + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001687: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chrome-trace-event@1.0.4: {} + + classnames@2.5.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comlink@4.4.2: {} + + commander@2.20.3: {} + + component-classes@1.2.6: + dependencies: + component-indexof: 0.0.3 + + component-indexof@0.0.3: {} + + compute-scroll-into-view@3.1.0: {} + + concat-map@0.0.1: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + core-js@2.6.12: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + create-react-class@15.7.0: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-animation@1.6.1: + dependencies: + babel-runtime: 6.26.0 + component-classes: 1.2.6 + + csstype@3.1.3: {} + + d3-binarytree@1.0.2: {} + + d3-dispatch@3.0.1: {} + + d3-force-3d@3.0.5: + dependencies: + d3-binarytree: 1.0.2 + d3-dispatch: 3.0.1 + d3-octree: 1.0.2 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-octree@1.0.2: {} + + d3-quadtree@3.0.1: {} + + d3-timer@3.0.1: {} + + dagre@0.8.5: + dependencies: + graphlib: 2.1.8 + lodash: 4.17.21 + + dayjs@1.11.13: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + delayed-stream@1.0.0: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-align@1.12.4: {} + + electron-to-chromium@1.5.73: {} + + emojis-list@3.0.0: {} + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-module-lexer@1.5.4: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-react-refresh@0.4.16(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.1 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.3: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.2: {} + + follow-redirects@1.15.9: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-render@2.5.1(@types/react@18.3.16)(antd@5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@ant-design/icons': 4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + ahooks: 3.8.4(react@18.3.1) + antd: 5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + async-validator: 3.5.2 + classnames: 2.5.1 + color: 3.2.1 + dayjs: 1.11.13 + lodash-es: 4.17.21 + rc-color-picker: 1.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + virtualizedtableforantd4: 1.3.1(antd@5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + zustand: 4.5.5(@types/react@18.3.16)(immer@10.1.1)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - immer + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + gl-matrix@3.4.3: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphlib@2.1.8: + dependencies: + lodash: 4.17.21 + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@2.5.5: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + + ignore@5.3.2: {} + + image-size@0.5.5: + optional: true + + immer@10.1.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + intersection-observer@0.12.2: {} + + is-any-array@2.0.1: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-what@3.14.1: {} + + isexe@2.0.0: {} + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.17.10 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + js-cookie@3.0.5: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json2mq@0.2.0: + dependencies: + string-convert: 0.2.1 + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + less@4.2.1: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.8.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + medium-editor@5.23.3: {} + + memoize-one@6.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: + optional: true + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + ml-array-max@1.2.4: + dependencies: + is-any-array: 2.0.1 + + ml-array-min@1.2.3: + dependencies: + is-any-array: 2.0.1 + + ml-array-rescale@1.3.7: + dependencies: + is-any-array: 2.0.1 + ml-array-max: 1.2.4 + ml-array-min: 1.2.3 + + ml-matrix@6.12.0: + dependencies: + is-any-array: 2.0.1 + ml-array-rescale: 1.3.7 + + mobx-preact@3.0.0(mobx@5.15.7)(preact@10.25.1): + dependencies: + hoist-non-react-statics: 2.5.5 + mobx: 5.15.7 + preact: 10.25.1 + + mobx-utils@5.6.2(mobx@5.15.7): + dependencies: + mobx: 5.15.7 + + mobx@5.15.7: {} + + mousetrap@1.6.5: {} + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + optional: true + + neo-async@2.6.2: {} + + node-releases@2.0.19: {} + + object-assign@4.1.1: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-node-version@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + performance-now@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@4.0.1: + optional: true + + postcss@8.4.49: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.25.1: {} + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-from-env@1.1.0: {} + + prr@1.0.1: + optional: true + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + raf@3.4.1: + dependencies: + performance-now: 2.1.0 + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + rangy@1.3.2: {} + + rc-align@2.4.5: + dependencies: + babel-runtime: 6.26.0 + dom-align: 1.12.4 + prop-types: 15.8.1 + rc-util: 4.21.1 + + rc-animate@2.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + babel-runtime: 6.26.0 + classnames: 2.5.1 + css-animation: 1.6.1 + prop-types: 15.8.1 + raf: 3.4.1 + rc-util: 4.21.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-lifecycles-compat: 3.0.4 + + rc-cascader@3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-select: 14.16.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-collapse@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-color-picker@1.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + classnames: 2.5.1 + prop-types: 15.8.1 + rc-trigger: 1.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 4.21.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tinycolor2: 1.6.0 + + rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-dropdown@4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-field-form@2.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/async-validator': 5.0.4 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-input-number@9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/mini-decimal': 1.1.0 + classnames: 2.5.1 + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-input@1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-mentions@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-menu@9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-motion@2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-notification@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-overflow@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-picker@4.8.3(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + dayjs: 1.11.13 + + rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-rate@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-resize-observer@1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + resize-observer-polyfill: 1.5.1 + + rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-select@14.16.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-slider@11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-table@7.49.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tabs@15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-input: 1.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + '@rc-component/trigger': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tree-select@5.24.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-select: 14.16.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-tree@5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-motion: 2.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-virtual-list: 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-trigger@1.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + babel-runtime: 6.26.0 + create-react-class: 15.7.0 + prop-types: 15.8.1 + rc-align: 2.4.5 + rc-animate: 2.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 4.21.1 + transitivePeerDependencies: + - react + - react-dom + + rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + rc-util@4.21.1: + dependencies: + add-dom-event-listener: 1.1.0 + prop-types: 15.8.1 + react-is: 16.13.1 + react-lifecycles-compat: 3.0.4 + shallowequal: 1.1.0 + + rc-util@5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + + rc-virtual-list@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.0 + classnames: 2.5.1 + rc-resize-observer: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-util: 5.44.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react-diff-viewer-continued@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@emotion/css': 11.13.5 + classnames: 2.5.1 + diff: 5.2.0 + memoize-one: 6.0.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - supports-color + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-fast-compare@3.2.2: {} + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-lifecycles-compat@3.0.4: {} + + react-redux@9.2.0(@types/react@18.3.16)(react@18.3.1)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.16 + redux: 5.0.1 + + react-refresh@0.14.2: {} + + react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.21.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.28.0(react@18.3.1) + + react-router@6.28.0(react@18.3.1): + dependencies: + '@remix-run/router': 1.21.0 + react: 18.3.1 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} + + regenerator-runtime@0.11.1: {} + + regenerator-runtime@0.14.1: {} + + require-from-string@2.0.2: {} + + reselect@5.1.1: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@4.28.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: + optional: true + + sax@1.4.1: + optional: true + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + screenfull@5.2.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.0 + + semver@5.7.2: + optional: true + + semver@6.3.1: {} + + semver@7.6.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + shallowequal@1.1.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + slash@3.0.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + string-convert@0.2.1: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + stylis@4.2.0: {} + + stylis@4.3.4: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.10(webpack@5.97.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.97.1 + + terser@5.37.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + text-table@0.2.0: {} + + throttle-debounce@5.0.2: {} + + tinycolor2@1.6.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toggle-selection@1.0.6: {} + + ts-api-utils@1.4.3(typescript@5.7.2): + dependencies: + typescript: 5.7.2 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typescript@5.7.2: {} + + undici-types@6.19.8: {} + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + + use-sync-external-store@1.4.0(react@18.3.1): + dependencies: + react: 18.3.1 + + utility-types@3.11.0: {} + + uuid@9.0.1: {} + + vanilla-picker@2.12.3: + dependencies: + '@sphinxxxx/color-conversion': 2.2.2 + + virtualizedtableforantd4@1.3.1(antd@5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + antd: 5.22.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + vite@5.4.11(@types/node@20.17.10)(less@4.2.1)(terser@5.37.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.28.1 + optionalDependencies: + '@types/node': 20.17.10 + fsevents: 2.3.3 + less: 4.2.1 + terser: 5.37.0 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webpack-sources@3.2.3: {} + + webpack@5.97.1: + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(webpack@5.97.1) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + workerize-loader@2.0.2(webpack@5.97.1): + dependencies: + loader-utils: 2.0.4 + webpack: 5.97.1 + + wrappy@1.0.2: {} + + yallist@3.1.1: {} + + yaml@1.10.2: {} + + yocto-queue@0.1.0: {} + + zustand@4.5.5(@types/react@18.3.16)(immer@10.1.1)(react@18.3.1): + dependencies: + use-sync-external-store: 1.2.2(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.16 + immer: 10.1.1 + react: 18.3.1 diff --git a/frontend/src/pages/System/External/types.ts b/frontend/src/pages/System/External/types.ts index 26685f35..a84dc623 100644 --- a/frontend/src/pages/System/External/types.ts +++ b/frontend/src/pages/System/External/types.ts @@ -1,5 +1,5 @@ import { BaseResponse } from '@/types/base/response'; -import { BaseQuery } from '@/types/base/query'; +import {BaseQuery} from "@/types/base"; // 系统类型枚举 export enum SystemType { diff --git a/frontend/src/pages/System/Menu/types.ts b/frontend/src/pages/System/Menu/types.ts index 7518fecf..fa6848c2 100644 --- a/frontend/src/pages/System/Menu/types.ts +++ b/frontend/src/pages/System/Menu/types.ts @@ -1,6 +1,6 @@ -import {BaseQuery} from "@/types/base/query.ts"; import {BaseRequest} from "@/types/base/request.ts"; import {BaseResponse} from "@/types/base/response.ts"; +import {BaseQuery} from "@/types/base"; export enum MenuTypeEnum { DIRECTORY = 1, // 目录 diff --git a/frontend/src/pages/System/Role/types.ts b/frontend/src/pages/System/Role/types.ts index 166faef1..0c227424 100644 --- a/frontend/src/pages/System/Role/types.ts +++ b/frontend/src/pages/System/Role/types.ts @@ -1,6 +1,6 @@ import type { BaseResponse } from '@/types/base/response'; -import {BaseQuery} from "@/types/base/query.ts"; import {BaseRequest} from "@/types/base/request.ts"; +import {BaseQuery} from "@/types/base"; // 权限类型枚举 export enum PermissionType { diff --git a/frontend/src/pages/System/Role/types/query.ts b/frontend/src/pages/System/Role/types/query.ts index 58550e63..f98ee8ac 100644 --- a/frontend/src/pages/System/Role/types/query.ts +++ b/frontend/src/pages/System/Role/types/query.ts @@ -1,4 +1,4 @@ -import { BaseQuery } from '@/types/base/query'; +import {BaseQuery} from "@/types/base"; export interface RoleQuery extends BaseQuery { name?: string; diff --git a/frontend/src/pages/System/User/types.ts b/frontend/src/pages/System/User/types.ts index 7473b6b9..8ffb59f0 100644 --- a/frontend/src/pages/System/User/types.ts +++ b/frontend/src/pages/System/User/types.ts @@ -1,5 +1,5 @@ import type { BaseResponse } from '@/types/base/response'; -import type { BaseQuery } from '@/types/base/query'; +import {BaseQuery} from "@/types/base"; // 用户查询参数 export interface UserQuery extends BaseQuery { diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/EdgeConfig/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/components/EdgeConfig/index.tsx deleted file mode 100644 index 37e1a8f1..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/EdgeConfig/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import { Form, Input, InputNumber } from 'antd'; -import { Edge } from '@antv/x6'; - -interface EdgeConfigProps { - edge: Edge; - form: any; - onValuesChange?: (changedValues: any, allValues: any) => void; -} - -interface EdgeData { - condition?: string; - description?: string; - priority?: number; -} - -const EdgeConfig: React.FC = ({ edge, form, onValuesChange }) => { - return ( -
- - - - - - - - - - - -
- ); -}; - -export default EdgeConfig; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx deleted file mode 100644 index cb6ebf4a..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/index.tsx +++ /dev/null @@ -1,257 +0,0 @@ -import React, { useMemo } from 'react'; -import { Form, Input, Select, InputNumber, Divider, Tooltip } from 'antd'; -import { InfoCircleOutlined } from '@ant-design/icons'; -import type { Rule } from 'antd/es/form'; -import { NodeType } from '../../../../types'; -import { validateNodeConfig } from './validate'; - -interface NodeConfigProps { - nodeType: NodeType; - form: any; - onValuesChange?: (changedValues: any, allValues: any) => void; -} - -interface JsonSchema { - type: string; - title?: string; - description?: string; - properties?: Record; - required?: string[]; - minimum?: number; - maximum?: number; - minLength?: number; - maxLength?: number; - format?: string; - default?: any; - enum?: any[]; - enumNames?: string[]; - additionalProperties?: JsonSchema; -} - -const parseJsonSafely = (jsonString: string): any => { - if (!jsonString) return {}; - - try { - // 如果已经是对象,直接返回 - if (typeof jsonString === 'object') { - return jsonString; - } - - // 打印原始字符串内容,帮助调试 - console.log('原始 JSON 字符串:', jsonString); - - // 尝试直接解析 - try { - return JSON.parse(jsonString); - } catch (e) { - console.log('直接解析失败,尝试预处理...'); - } - - // 预处理字符串 - let processedString = jsonString; - - // 1. 处理换行符 - processedString = processedString.replace(/[\r\n]+/g, ' '); - - // 2. 处理转义字符 - processedString = processedString.replace(/\\/g, '\\\\') - .replace(/\\\\"/g, '\\"') - .replace(/\\\\n/g, '\\n') - .replace(/\\\\r/g, '\\r') - .replace(/\\\\t/g, '\\t'); - - // 3. 确保属性名称正确引用 - processedString = processedString.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2":'); - - console.log('处理后的 JSON 字符串:', processedString); - - return JSON.parse(processedString); - } catch (error) { - console.error('JSON解析错误:', error); - console.error('解析失败的字符串:', jsonString); - // 返回空对象而不是 null,避免后续操作出错 - return {}; - } -}; - -const NodeConfig: React.FC = ({ nodeType, form, onValuesChange }) => { - // 解析节点配置模式 - const nodeSchema = useMemo(() => { - if (!nodeType.configSchema) return null; - return parseJsonSafely(nodeType.configSchema); - }, [nodeType.configSchema]); - - // 解析节点默认配置 - const nodeDefaultConfig = useMemo(() => { - if (!nodeType.defaultConfig) return {}; - return parseJsonSafely(nodeType.defaultConfig) || {}; - }, [nodeType.defaultConfig]); - - // 当前选中的执行器 - const selectedExecutor = Form.useWatch('executor', form); - - // 获取当前执行器的配置模式 - const executorSchema = useMemo(() => { - if (!selectedExecutor || !nodeType.executors) return null; - const executor = nodeType.executors.find(e => e.code === selectedExecutor); - if (!executor?.configSchema) return null; - return parseJsonSafely(executor.configSchema); - }, [selectedExecutor, nodeType.executors]); - - // 验证配置 - const validateField = async (_: any, value: any) => { - const allValues = form.getFieldsValue(); - const validationResult = validateNodeConfig(nodeType, allValues); - - if (!validationResult.valid) { - const fieldErrors = validationResult.errors.filter(error => - error.toLowerCase().includes(_?.field?.toLowerCase() || '') - ); - if (fieldErrors.length > 0) { - throw new Error(fieldErrors.join('; ')); - } - } - return Promise.resolve(); - }; - - // 根据schema生成表单验证规则 - const generateRules = (schema: JsonSchema, fieldName: string): Rule[] => { - const rules: Rule[] = []; - - if (schema.required?.includes(fieldName)) { - rules.push({ required: true, message: `请输入${schema.title || fieldName}` }); - } - - if (schema.type === 'string') { - if (schema.minLength !== undefined) { - rules.push({ min: schema.minLength, message: `${schema.title || fieldName}最少${schema.minLength}个字符` }); - } - if (schema.maxLength !== undefined) { - rules.push({ max: schema.maxLength, message: `${schema.title || fieldName}最多${schema.maxLength}个字符` }); - } - } - - if (schema.type === 'number') { - if (schema.minimum !== undefined) { - rules.push({ type: 'number', min: schema.minimum, message: `${schema.title || fieldName}不能小于${schema.minimum}` }); - } - if (schema.maximum !== undefined) { - rules.push({ type: 'number', max: schema.maximum, message: `${schema.title || fieldName}不能大于${schema.maximum}` }); - } - } - - rules.push({ validator: validateField }); - return rules; - }; - - // 根据schema生成表单项 - const renderFormItem = (fieldName: string, fieldSchema: JsonSchema) => { - const rules = generateRules(fieldSchema, fieldName); - const commonProps = { - label: ( - - {fieldSchema.title || fieldName} - {fieldSchema.description && ( - - - - )} - - ), - name: fieldName, - rules - }; - - switch (fieldSchema.type) { - case 'string': - if (fieldSchema.enum) { - return ( - - - - ); - - case 'number': - return ( - - - - ); - - case 'object': - if (fieldSchema.additionalProperties) { - return ( - - - - ); - } - return null; - - default: - return null; - } - }; - - // 渲染节点基本配置 - const renderNodeConfig = () => { - if (!nodeSchema?.properties) return null; - return Object.entries(nodeSchema.properties).map(([fieldName, fieldSchema]) => - renderFormItem(fieldName, fieldSchema) - ); - }; - - // 渲染执行器配置 - const renderExecutorConfig = () => { - if (!executorSchema?.properties) return null; - return Object.entries(executorSchema.properties).map(([fieldName, fieldSchema]) => - renderFormItem(fieldName, fieldSchema) - ); - }; - - return ( -
- {renderNodeConfig()} - {selectedExecutor && ( - <> - - {renderExecutorConfig()} - - )} - - ); -}; - -export default NodeConfig; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/validate.ts b/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/validate.ts deleted file mode 100644 index 23cf2ce4..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodeConfig/validate.ts +++ /dev/null @@ -1,78 +0,0 @@ -import Ajv from 'ajv'; -import addFormats from 'ajv-formats'; -import {NodeTypeEnum} from "@/pages/Workflow/Definition/Designer/components/NodePanel/types"; - -const ajv = new Ajv({ - allErrors: true, - verbose: true, - $data: true, - strict: false -}); - -addFormats(ajv); - -export interface ValidationResult { - valid: boolean; - errors: string[]; -} - -export const validateNodeConfig = ( - nodeType: NodeTypeEnum, - formData: any -): ValidationResult => { - console.log('Validating node config:', { nodeType, formData }); - - try { - // 1. 解析节点的 schema - const nodeSchema = JSON.parse(nodeType.configSchema); - console.log('Node schema:', nodeSchema); - - let errors: string[] = []; - - // 2. 验证基本配置 - const validateNode = ajv.compile(nodeSchema); - const nodeValid = validateNode(formData); - console.log('Node validation result:', { valid: nodeValid, errors: validateNode.errors }); - - if (!nodeValid && validateNode.errors) { - errors = validateNode.errors.map(err => { - const field = err.instancePath.replace('/', '') || '配置'; - return `${field}: ${err.message}`; - }); - } - - // 3. 如果有执行器配置,验证执行器配置 - if (formData.executor && nodeType.executors?.length > 0) { - const executor = nodeType.executors.find(e => e.code === formData.executor); - if (executor?.configSchema) { - console.log('Validating executor config:', executor.configSchema); - const executorSchema = JSON.parse(executor.configSchema); - const validateExecutor = ajv.compile(executorSchema); - const executorValid = validateExecutor(formData); - console.log('Executor validation result:', { valid: executorValid, errors: validateExecutor.errors }); - - if (!executorValid && validateExecutor.errors) { - errors = errors.concat( - validateExecutor.errors.map(err => { - const field = err.instancePath.replace('/', '') || '执行器配置'; - return `${field}: ${err.message}`; - }) - ); - } - } - } - - const result = { - valid: errors.length === 0, - errors - }; - console.log('Final validation result:', result); - return result; - } catch (error) { - console.error('Schema validation error:', error); - return { - valid: false, - errors: ['配置验证失败:schema 解析错误'] - }; - } -}; diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.css b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.css deleted file mode 100644 index d79371bd..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.css +++ /dev/null @@ -1,67 +0,0 @@ -.node-panel { - height: 100%; - overflow: hidden; - display: flex; - flex-direction: column; -} - -.node-panel-loading { - height: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.node-panel-content { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); - gap: 12px; - padding: 12px; - overflow-y: auto; -} - -.node-card { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 12px; - border: 1px solid #e8e8e8; - border-radius: 4px; - cursor: move; - transition: all 0.3s; - background: white; -} - -.node-card:hover { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); -} - -.node-icon { - font-size: 24px; - margin-bottom: 8px; -} - -.node-name { - font-size: 12px; - text-align: center; - color: #333; - line-height: 1.5; -} - -.node-tabs { - flex: 1; - overflow: hidden; - display: flex; - flex-direction: column; -} - -.node-tabs :global(.ant-tabs-content) { - flex: 1; - overflow: hidden; -} - -.node-tabs :global(.ant-tabs-tabpane) { - height: 100%; - overflow: hidden; -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.less b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.less deleted file mode 100644 index e5545a38..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.less +++ /dev/null @@ -1,110 +0,0 @@ -.node-panel { - height: 100%; - border-right: 1px solid #e8e8e8; - background-color: #fff; - - &-tabs { - height: 100%; - - :global { - .ant-tabs-nav { - margin: 0; - padding: 0 12px; - background-color: #fafafa; - border-bottom: 1px solid #f0f0f0; - - .ant-tabs-tab { - padding: 8px 12px; - margin: 0 4px !important; - transition: all 0.3s; - border-radius: 4px 4px 0 0; - - &:hover { - color: #1890ff; - background: rgba(24, 144, 255, 0.1); - } - - &.ant-tabs-tab-active { - background: #fff; - border-bottom-color: #fff; - - .ant-tabs-tab-btn { - color: #1890ff; - font-weight: 500; - } - } - } - } - - .ant-tabs-content { - height: calc(100% - 44px); - padding: 12px; - overflow: auto; - } - } - } -} - -.node-panel-content { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); - gap: 16px; - padding: 8px; - - .node-item { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 90px; - padding: 16px; - border-radius: 4px; - cursor: move; - transition: all 0.3s; - user-select: none; - - &:hover { - box-shadow: 0 2px 8px rgba(24, 144, 255, 0.15); - transform: translateY(-1px); - } - - &:active { - transform: translateY(0); - } - - .node-icon { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 8px; - font-size: 24px; - line-height: 1; - - .anticon { - display: block; - } - } - - .node-name { - margin-bottom: 4px; - color: #262626; - font-size: 14px; - font-weight: 500; - text-align: center; - line-height: 1.4; - } - - .node-desc { - color: #8c8c8c; - font-size: 12px; - text-align: center; - line-height: 1.4; - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - } -} diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less deleted file mode 100644 index dfa5c099..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less +++ /dev/null @@ -1,121 +0,0 @@ -:global { - .workflow-node-tabs { - height: 100%; - - .ant-tabs { - height: 100%; - - .ant-tabs-nav { - margin-bottom: 12px; - padding: 0 12px; - background: #fafafa; - border-bottom: 1px solid #f0f0f0; - - .ant-tabs-tab { - padding: 12px 0; - font-size: 14px; - transition: all 0.3s; - - &:hover { - color: #1890ff; - } - - .anticon { - margin-right: 8px; - } - } - - .ant-tabs-tab-active { - .ant-tabs-tab-btn { - color: #1890ff; - font-weight: 500; - } - } - - .ant-tabs-ink-bar { - background: #1890ff; - } - } - } - - .ant-tabs-content { - height: calc(100% - 46px); - padding: 0 12px 12px; - overflow-y: auto; - - &::-webkit-scrollbar { - width: 6px; - height: 6px; - } - - &::-webkit-scrollbar-thumb { - background: #ccc; - border-radius: 3px; - - &:hover { - background: #999; - } - } - - &::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 3px; - } - } - - .ant-empty { - margin: 32px 0; - color: #999; - } - } - - .workflow-node-card { - margin-bottom: 16px; - cursor: move; - border-radius: 4px; - transition: all 0.3s; - background: #fff; - border: 1px solid #f0f0f0; - padding: 12px; - - &:hover { - border-color: #1890ff; - box-shadow: 0 2px 8px rgba(24, 144, 255, 0.15); - transform: translateY(-1px); - } - } - - .workflow-node-icon { - width: 40px; - height: 40px; - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; - margin: 0 auto 8px; - color: #fff; - font-size: 20px; - transition: all 0.3s; - - .anticon { - transition: all 0.3s; - } - - &:hover { - transform: scale(1.1); - - .anticon { - transform: scale(1.1); - } - } - } - - .workflow-node-name { - font-size: 14px; - color: #333; - text-align: center; - line-height: 1.5; - margin: 0; - font-weight: 500; - } -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less.d.ts b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less.d.ts deleted file mode 100644 index 48263c58..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.module.less.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare namespace NodePanelModuleLessNamespace { - export interface INodePanelModuleLess { - nodeTabs: string; - nodeCard: string; - nodeIcon: string; - nodeName: string; - } -} - -declare module '*.less' { - const content: NodePanelModuleLessNamespace.INodePanelModuleLess; - export default content; -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.tsx deleted file mode 100644 index 9f66ce60..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/index.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { Tabs, Spin } from 'antd'; -import * as Icons from '@ant-design/icons'; -import { NodeType, NodeCategory } from './types'; -import { getNodeTypes } from '../../../../service'; -import './index.less'; - -interface NodePanelProps { - onNodeDragStart: (nodeType: NodeType) => void; -} - -const NodePanel: React.FC = ({ onNodeDragStart }) => { - const [nodeTypes, setNodeTypes] = useState([]); - const [loading, setLoading] = useState(false); - - useEffect(() => { - const fetchNodeTypes = async () => { - setLoading(true); - try { - const response = await getNodeTypes({ enabled: true }); - console.log('节点类型原始数据:', response); - if (response?.content) { - // 处理每个节点的样式 - const processedTypes = response.content.map(node => ({ - ...node, - // 确保graphConfig中的style存在 - style: node.graphConfig?.style || { - fill: '#ffffff', - stroke: '#1890ff', - strokeWidth: 2, - icon: 'api', - iconColor: '#1890ff' - } - })); - console.log('处理后的节点数据:', processedTypes); - setNodeTypes(processedTypes); - } - } catch (error) { - console.error('获取节点类型失败:', error); - } finally { - setLoading(false); - } - }; - - fetchNodeTypes(); - }, []); - - // 获取图标组件 - const getIcon = (iconName: string) => { - if (!iconName) return null; - - // 转换图标名称为大驼峰格式 - const formatIconName = (name: string) => { - return name - .split('-') - .map(part => part.charAt(0).toUpperCase() + part.slice(1)) - .join(''); - }; - - // 尝试多种图标命名方式 - const iconVariants = [ - formatIconName(iconName), - `${formatIconName(iconName)}Outlined`, - `${formatIconName(iconName)}Filled`, - `${formatIconName(iconName)}TwoTone` - ]; - - console.log('尝试加载图标:', iconName, iconVariants); - - for (const variant of iconVariants) { - const IconComponent = (Icons as any)[variant]; - if (IconComponent) { - console.log('成功找到图标组件:', variant); - return React.createElement(IconComponent); - } - } - console.warn('未找到图标组件:', iconName, iconVariants); - return null; - }; - - // 按类别分组节点类型 - const groupedNodeTypes = nodeTypes.reduce((acc, nodeType) => { - const category = nodeType.category || NodeCategory.TASK; - if (!acc[category]) { - acc[category] = []; - } - acc[category].push(nodeType); - return acc; - }, {} as Record); - - // 获取类别标签 - const getCategoryLabel = (category: string): string => { - switch (category) { - case NodeCategory.EVENT: - return '事件节点'; - case NodeCategory.TASK: - return '任务节点'; - case NodeCategory.GATEWAY: - return '网关节点'; - case NodeCategory.CONTAINER: - return '容器节点'; - default: - return '其他节点'; - } - }; - - // 将分组转换为 Tabs 项 - const tabItems = Object.entries(groupedNodeTypes).map(([category, types]) => ({ - key: category, - label: getCategoryLabel(category), - children: ( -
- {types.map((nodeType) => { - // 从graphConfig中获取样式 - const style = nodeType.graphConfig?.style || nodeType.style || {}; - console.log('节点样式:', nodeType.type, style); - const icon = getIcon(style.icon); - - const nodeStyle = { - backgroundColor: style.fill || '#ffffff', - borderColor: style.stroke || '#d9d9d9', - borderWidth: `${style.strokeWidth || 1}px`, - borderStyle: 'solid' - }; - - console.log('应用的样式:', nodeType.type, nodeStyle); - - return ( -
{ - e.dataTransfer.effectAllowed = 'move'; - onNodeDragStart(nodeType); - }} - style={nodeStyle} - > - {icon && ( - - {icon} - - )} - {nodeType.name} - {nodeType.description} -
- ); - })} -
- ), - })); - - return ( -
- - - -
- ); -}; - -export default NodePanel; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/types.ts b/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/types.ts deleted file mode 100644 index 7e3e94d7..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/NodePanel/types.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { BaseResponse } from '@/types/base/response'; - -/** - * 节点样式 - */ -export interface NodeStyle { - fill: string; // 填充颜色 - stroke: string; // 边框颜色 - strokeWidth: number; // 边框宽度 - icon: string; // 图标名称 - iconColor: string; // 图标颜色 -} - -/** - * 节点类别 - */ -export enum NodeCategory { - EVENT = 'EVENT', // 事件节点 - TASK = 'TASK', // 任务节点 - GATEWAY = 'GATEWAY', // 网关节点 - CONTAINER = 'CONTAINER' // 容器节点 -} - -/** - * 节点类型 - */ -export enum NodeTypeEnum { - START_EVENT = 'START_EVENT', // 开始节点 - END_EVENT = 'END_EVENT', // 结束节点 - USER_TASK = 'USER_TASK', // 用户任务 - SERVICE_TASK = 'SERVICE_TASK', // 服务任务 - SCRIPT_TASK = 'SCRIPT_TASK', // 脚本任务 - EXCLUSIVE_GATEWAY = 'EXCLUSIVE_GATEWAY', // 排他网关 - PARALLEL_GATEWAY = 'PARALLEL_GATEWAY', // 并行网关 - SUB_PROCESS = 'SUB_PROCESS', // 子流程 - CALL_ACTIVITY = 'CALL_ACTIVITY' // 调用活动 -} - -/** - * 节点图形配置 - */ -export interface NodeGraphConfig { - style: NodeStyle; // 节点样式 - ports?: any[]; // 连接点配置 - shape?: string; // 节点形状 -} - -/** - * 节点类型定义 - */ -export interface NodeType extends BaseResponse { - type: NodeTypeEnum; // 节点类型 - name: string; // 节点名称 - description: string; // 节点描述 - category: NodeCategory; // 节点分类 - graphConfig: NodeGraphConfig; // 图形配置 - style?: NodeStyle; // 兼容旧版本的样式配置 - orderNum: number; // 排序号 - enabled: boolean; // 是否启用 - deleted: boolean; // 是否删除 - extraData: any; // 扩展数据 -} diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.less b/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.less deleted file mode 100644 index f65143bc..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.less +++ /dev/null @@ -1,54 +0,0 @@ -.workflow-toolbar { - padding: 8px 16px; - background: #fff; - border-bottom: 1px solid #f0f0f0; - display: flex; - align-items: center; - justify-content: center; - - .ant-btn { - padding: 4px 8px; - border: none; - background: transparent; - - &:hover { - color: #1890ff; - background: #f5f5f5; - } - - &[disabled] { - color: #d9d9d9; - background: transparent; - cursor: not-allowed; - - &:hover { - color: #d9d9d9; - background: transparent; - } - } - - &-dangerous { - color: #ff4d4f; - - &:hover { - color: #ff7875; - background: #fff1f0; - } - - &[disabled] { - color: #d9d9d9; - background: transparent; - - &:hover { - color: #d9d9d9; - background: transparent; - } - } - } - } - - .ant-divider { - height: 16px; - margin: 0 8px; - } -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.tsx deleted file mode 100644 index 2cb7bc76..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/components/Toolbar/index.tsx +++ /dev/null @@ -1,334 +0,0 @@ -import React, { useEffect } from 'react'; -import { Space, Button, Tooltip, Divider, message } from 'antd'; -import { - ZoomInOutlined, - ZoomOutOutlined, - FullscreenOutlined, - OneToOneOutlined, - SelectOutlined, - DeleteOutlined, - UndoOutlined, - RedoOutlined, - CopyOutlined, - SnippetsOutlined, - CheckCircleOutlined, -} from '@ant-design/icons'; -import { Graph, Cell } from '@antv/x6'; -import { Selection } from '@antv/x6-plugin-selection'; -import { History } from '@antv/x6-plugin-history'; -import { Clipboard } from '@antv/x6-plugin-clipboard'; -import { Transform } from '@antv/x6-plugin-transform'; -import { Keyboard } from '@antv/x6-plugin-keyboard'; -import { validateFlow, hasCycle } from '../../validate'; -import './index.less'; - -interface ToolbarProps { - graph: Graph | undefined; -} - -const Toolbar: React.FC = ({ graph }) => { - useEffect(() => { - if (graph) { - // 启用选择插件 - graph.use( - new Selection({ - enabled: true, - multiple: true, - rubberband: true, - movable: true, - showNodeSelectionBox: true, - showEdgeSelectionBox: true, - }) - ); - // 启用历史记录 - graph.use( - new History({ - enabled: true, - }) - ); - // 启用剪贴板 - graph.use( - new Clipboard({ - enabled: true, - }) - ); - // 启用变换 - graph.use( - new Transform({ - resizing: { - enabled: true, - }, - rotating: { - enabled: true, - }, - }) - ); - // 启用键盘 - graph.use(new Keyboard({ - enabled: true, - })); - - // 启用画布交互 - graph.enableSelection(); - graph.enableRubberband(); - - const keyboard = graph.getPlugin('keyboard'); - if (keyboard) { - // 复制粘贴快捷键 - keyboard.bindKey(['meta+c', 'ctrl+c'], () => { - const selection = graph.getPlugin('selection'); - const clipboard = graph.getPlugin('clipboard'); - const cells = selection?.getSelectedCells(); - if (cells?.length) { - clipboard?.copy(cells); - } - return false; - }); - - keyboard.bindKey(['meta+v', 'ctrl+v'], () => { - const clipboard = graph.getPlugin('clipboard'); - const selection = graph.getPlugin('selection'); - if (clipboard && !clipboard.isEmpty()) { - const cells = clipboard.paste(); - selection?.clean(); - cells.forEach((cell: Cell) => selection?.select(cell)); - } - return false; - }); - - // 全选快捷键 - keyboard.bindKey(['meta+a', 'ctrl+a'], () => { - const selection = graph.getPlugin('selection'); - const cells = graph.getCells(); - selection?.clean(); - cells.forEach((cell: Cell) => selection?.select(cell)); - return false; - }); - - // 删除快捷键 - keyboard.bindKey(['backspace', 'delete'], () => { - const selection = graph.getPlugin('selection'); - const cells = selection?.getSelectedCells(); - if (cells?.length) { - graph.removeCells(cells); - } - return false; - }); - - // 撤销重做快捷键 - keyboard.bindKey(['meta+z', 'ctrl+z'], () => { - const history = graph.getPlugin('history'); - if (history?.canUndo()) { - history.undo(); - } - return false; - }); - - keyboard.bindKey(['meta+shift+z', 'ctrl+shift+z'], () => { - const history = graph.getPlugin('history'); - if (history?.canRedo()) { - history.redo(); - } - return false; - }); - } - } - }, [graph]); - - // 缩放画布 - const zoom = (delta: number) => { - if (!graph) return; - const currentZoom = graph.zoom(); - const nextZoom = delta > 0 - ? Math.min(2, currentZoom + 0.1) // 放大,最大2倍 - : Math.max(0.5, currentZoom - 0.1); // 缩小,最小0.5倍 - graph.zoomTo(nextZoom); - graph.centerContent(); // 居中显示内容 - }; - - // 适应画布 - const fitContent = () => { - if (!graph) return; - graph.zoomToFit({ padding: 20, maxScale: 2 }); - graph.centerContent(); - }; - - // 实际大小 - const resetZoom = () => { - if (!graph) return; - graph.scale(1); - graph.centerContent(); - }; - - // 全选 - const selectAll = () => { - if (!graph) return; - const cells = graph.getCells(); - const selection = graph.getPlugin('selection'); - selection?.clean(); - cells.forEach((cell: Cell) => selection?.select(cell)); - }; - - // 删除选中 - const deleteSelected = () => { - if (!graph) return; - const selection = graph.getPlugin('selection'); - const cells = selection?.getSelectedCells(); - if (cells?.length) { - graph.removeCells(cells); - } - }; - - // 撤销 - const undo = () => { - if (!graph) return; - const history = graph.getPlugin('history'); - if (history?.canUndo()) { - history.undo(); - } - }; - - // 重做 - const redo = () => { - if (!graph) return; - const history = graph.getPlugin('history'); - if (history?.canRedo()) { - history.redo(); - } - }; - - // 复制 - const copy = () => { - if (!graph) return; - const clipboard = graph.getPlugin('clipboard'); - const selection = graph.getPlugin('selection'); - const cells = selection?.getSelectedCells(); - if (cells?.length) { - clipboard?.copy(cells); - } - }; - - // 粘贴 - const paste = () => { - if (!graph) return; - const clipboard = graph.getPlugin('clipboard'); - const selection = graph.getPlugin('selection'); - if (clipboard && !clipboard.isEmpty()) { - const cells = clipboard.paste(); - selection?.clean(); - cells.forEach((cell: Cell) => selection?.select(cell)); - } - }; - - // 检查是否有选中的节点或边 - const hasSelection = () => { - if (!graph) return false; - const selection = graph.getPlugin('selection'); - return (selection?.getSelectedCells().length || 0) > 0; - }; - - // 检查是否可以粘贴 - const canPaste = () => { - if (!graph) return false; - const clipboard = graph.getPlugin('clipboard'); - return !clipboard?.isEmpty(); - }; - - // 验证流程 - const validateWorkflow = () => { - if (!graph) return; - - const result = validateFlow(graph); - const hasCycleResult = hasCycle(graph); - - if (hasCycleResult) { - message.error('流程图中存在循环,请检查'); - return; - } - - if (!result.valid) { - message.error(result.errors.join('\n')); - return; - } - - message.success('流程验证通过'); - }; - - return ( -
- }> - - - - - - -
- ); -}; - -export default Toolbar; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/index.module.less b/frontend/src/pages/Workflow/Definition/Designer/index.module.less deleted file mode 100644 index 9023f524..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/index.module.less +++ /dev/null @@ -1,106 +0,0 @@ -:global { - .workflow-designer { - height: 100%; - display: flex; - flex-direction: column; - - &-container { - height: calc(100vh - 170px); - height: 100%; - background: #fff; - border-radius: 2px; - display: flex; - flex-direction: column; - } - - &-sider { - background: #fff; - border-right: 1px solid #f0f0f0; - overflow: auto; - flex-shrink: 0; - } - - &-content { - position: relative; - height: 100%; - padding: 16px; - flex: 1; - min-height: 0; // 允许内容区域收缩 - padding: 8px; // 减小内边距 - background: #fafafa; - display: flex; - flex-direction: column; - } - - &-graph { - height: 100%; - flex: 1; - min-height: 0; // 允许内容区域收缩 - background: #fff; - border: 1px solid #f0f0f0; - border-radius: 2px; - position: relative; - } - - &-minimap { - position: absolute; - right: 20px; - bottom: 20px; - border: 1px solid #e5e5e5; - border-radius: 4px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); - background-color: #fff; - overflow: hidden; - z-index: 999; - - :global { - .x6-widget-minimap-viewport { - border: 2px solid #1890ff; - border-radius: 2px; - } - - .x6-widget-minimap-viewport-zoom { - border-color: #52c41a; - } - } - } - } - - .ant-card-body { - height: calc(100% - 57px); - padding: 0; - - .ant-card { - height: 100%; - display: flex; - flex-direction: column; - - .ant-card-head { - flex-shrink: 0; - } - - .ant-card-body { - flex: 1; - padding: 0; - min-height: 0; // 允许内容区域收缩 - display: flex; - flex-direction: column; - } - } - - .ant-layout { - height: 100%; - flex: 1; - min-height: 0; // 允许内容区域收缩 - background: #fff; - display: flex; - - .ant-layout-content { - flex: 1; - position: relative; - padding: 8px; // 减小内边距 - background: #fafafa; - } - } - } -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/index.module.less.d.ts b/frontend/src/pages/Workflow/Definition/Designer/index.module.less.d.ts deleted file mode 100644 index 364c86e2..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/index.module.less.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare namespace DesignerModuleLessNamespace { - export interface IDesignerModuleLess { - container: string; - sider: string; - content: string; - graph: string; - } -} - -declare module '*.less' { - const content: DesignerModuleLessNamespace.IDesignerModuleLess; - export default content; -} \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/index.tsx b/frontend/src/pages/Workflow/Definition/Designer/index.tsx deleted file mode 100644 index 90ab2aac..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/index.tsx +++ /dev/null @@ -1,649 +0,0 @@ -import React, {useEffect, useRef, useState} from 'react'; -import {useNavigate, useParams} from 'react-router-dom'; -import {Button, Card, Layout, message, Space, Spin, Drawer, Form, Dropdown} from 'antd'; -import {ArrowLeftOutlined, SaveOutlined, DeleteOutlined, CopyOutlined, SettingOutlined, ClearOutlined, FullscreenOutlined} from '@ant-design/icons'; -import {getDefinition, updateDefinition, getNodeTypes} from '../../service'; -import {WorkflowDefinition, WorkflowStatus} from '../../../Workflow/types'; -import {Graph, Node, Cell, Edge} from '@antv/x6'; -import '@antv/x6-react-shape'; -import './index.module.less'; -import NodePanel from './components/NodePanel'; -import NodeConfig from './components/NodeConfig'; -import Toolbar from './components/Toolbar'; -import EdgeConfig from './components/EdgeConfig'; -import { validateFlow, hasCycle } from './validate'; -import { generateNodeStyle, generatePorts, calculateCanvasPosition, getNodeShape, getNodeSize } from './utils/nodeUtils'; -import { initGraph } from './utils/graphUtils'; -import { NodeType, NodeData, WorkflowGraph } from './types'; - -const {Sider, Content} = Layout; - -interface NodeData { - type: string; - name?: string; - description?: string; - config: { - executor?: string; - retryTimes?: number; - retryInterval?: number; - script?: string; - timeout?: number; - workingDirectory?: string; - environment?: string; - successExitCode?: string; - [key: string]: any; - }; -} - -const FlowDesigner: React.FC = () => { - const navigate = useNavigate(); - const {id} = useParams<{ id: string }>(); - const [loading, setLoading] = useState(false); - const [detail, setDetail] = useState(); - const containerRef = useRef(null); - const graphRef = useRef(); - const [graph, setGraph] = useState(); - const draggedNodeRef = useRef(); - const [configVisible, setConfigVisible] = useState(false); - const [currentNode, setCurrentNode] = useState(); - const [currentNodeType, setCurrentNodeType] = useState(); - const [nodeTypes, setNodeTypes] = useState([]); - const [form] = Form.useForm(); - const [currentEdge, setCurrentEdge] = useState(); - const [edgeConfigVisible, setEdgeConfigVisible] = useState(false); - const [edgeForm] = Form.useForm(); - - // 右键菜单状态 - const [contextMenu, setContextMenu] = useState<{ - x: number; - y: number; - visible: boolean; - type: 'node' | 'edge' | 'canvas'; - cell?: Cell; - }>({ - x: 0, - y: 0, - visible: false, - type: 'canvas', - }); - - // 右键菜单项 - const menuItems = { - node: [ - { - key: 'delete', - label: '删除节点', - icon: , - onClick: () => { - if (contextMenu.cell) { - contextMenu.cell.remove(); - } - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - { - key: 'copy', - label: '复制节点', - icon: , - onClick: () => { - if (contextMenu.cell && contextMenu.cell.isNode()) { - const pos = contextMenu.cell.position(); - const newCell = contextMenu.cell.clone(); - newCell.position(pos.x + 20, pos.y + 20); - graph?.addCell(newCell); - } - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - { - key: 'config', - label: '配置节点', - icon: , - onClick: () => { - if (contextMenu.cell && contextMenu.cell.isNode()) { - setCurrentNode(contextMenu.cell); - const data = contextMenu.cell.getData() as NodeData; - console.log(data) - // const nodeType = nodeTypes.find(type => type.type === data.type); - // if (nodeType) { - // setCurrentNodeType(nodeType); - // const formValues = { - // name: data.name || nodeType.name, - // description: data.description, - // ...data.config - // }; - // form.setFieldsValue(formValues); - // } - setConfigVisible(true); - } - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - ], - edge: [ - { - key: 'config', - label: '配置连线', - icon: , - onClick: () => { - if (contextMenu.cell && contextMenu.cell.isEdge()) { - handleEdgeConfig(contextMenu.cell); - } - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - { - key: 'delete', - label: '删除连线', - icon: , - onClick: () => { - if (contextMenu.cell) { - contextMenu.cell.remove(); - } - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - ], - canvas: [ - { - key: 'clear', - label: '清空画布', - icon: , - onClick: () => { - graph?.clearCells(); - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - { - key: 'fit', - label: '适应画布', - icon: , - onClick: () => { - graph?.zoomToFit({ padding: 20 }); - setContextMenu(prev => ({ ...prev, visible: false })); - }, - }, - ], - }; - - // 获取所有节点类型 - const fetchNodeTypes = async () => { - try { - const response = await getNodeTypes({enabled: true}); - if (response?.content && Array.isArray(response.content)) { - setNodeTypes(response.content); - return response.content; - } else { - console.error('获取节点类型返回格式错误:', response); - message.error('获取节点类型失败:返回格式错误'); - return []; - } - } catch (error) { - console.error('获取节点类型失败:', error); - message.error('获取节点类型失败'); - return []; - } - }; - - // 首次加载获取节点类型 - useEffect(() => { - fetchNodeTypes(); - }, []); - - // 初始化图形 - useEffect(() => { - if (detail && containerRef.current) { - const graph = initGraph({ - container: containerRef.current, - miniMapContainer: document.getElementById('workflow-minimap')!, - onContextMenu: (params) => setContextMenu(params), - onNodeClick: (node) => { - setCurrentNode(node); - const data = node.getData() as NodeData; - console.log('Node clicked, data:', data); - - if (data) { - const nodeType = nodeTypes.find(type => type.type === data.type); - if (nodeType) { - setCurrentNodeType(nodeType); - const formValues = { - name: data.name || nodeType.name, - description: data.description, - ...data.config - }; - console.log('Setting form values:', formValues); - form.setFieldsValue(formValues); - setConfigVisible(true); - } else { - message.error('未找到对应的节点类型'); - } - } - }, - onGraphChange: (g) => setGraph(g), - onDragOver: handleDragOver, - onDrop: handleDrop, - flowDetail: detail - }); - - graphRef.current = graph; - setGraph(graph); - - // 加载流程图数据 - if (detail) { - loadGraphData(graph, detail); - } - - // 清理函数 - return () => { - if (containerRef.current) { - containerRef.current.removeEventListener('dragover', handleDragOver); - containerRef.current.removeEventListener('drop', handleDrop); - } - if (graphRef.current) { - graphRef.current.dispose(); - } - }; - } - }, [detail, nodeTypes]); - - // 处理拖拽移动 - const handleDragOver = (e: DragEvent) => { - e.preventDefault(); - e.dataTransfer!.dropEffect = 'copy'; - }; - - // 处理拖拽放置 - const handleDrop = (e: DragEvent) => { - e.preventDefault(); - const nodeType = draggedNodeRef.current; - if (!nodeType || !graphRef.current || !containerRef.current) { - message.error('无效的节点类型或画布未初始化'); - return; - } - - try { - const rect = containerRef.current.getBoundingClientRect(); - const matrix = graphRef.current.matrix(); - - // 使用新的工具函数计算画布位置 - const dropPosition = calculateCanvasPosition( - e.clientX, - e.clientY, - rect, - { - scale: matrix.a, - offsetX: matrix.e, - offsetY: matrix.f, - } - ); - - // 获取节点大小 - let size; - if (nodeType.type === 'start' || nodeType.type === 'end') { - size = { width: 40, height: 40 }; - } else { - size = { width: 100, height: 60 }; - } - - // 创建节点 - const node = graphRef.current.addNode({ - shape: getNodeShape(nodeType.type), - attrs: generateNodeStyle(nodeType.type, nodeType.name), - data: { - type: nodeType.type, - config: { - type: nodeType.type, - name: nodeType.name - } - }, - position: dropPosition, - size: size, - ports: generatePorts(nodeType.type), - }); - - // 选中新创建的节点并打开配置 - graphRef.current.cleanSelection(); - graphRef.current.select(node); - setCurrentNode(node); - setCurrentNodeType(nodeType); - form.setFieldsValue({ name: nodeType.name }); - setConfigVisible(true); - - message.success('节点创建成功'); - } catch (error) { - console.error('创建节点失败:', error); - message.error('创建节点失败'); - } - }; - - // 验证Shell节点配置 - function validateShellConfig(config: any): boolean { - if (!config.script?.trim()) { - throw new Error('脚本内容不能为空'); - } - if (config.timeout !== undefined && config.timeout <= 0) { - throw new Error('超时时间必须大于0'); - } - if (config.retryTimes !== undefined && config.retryTimes < 0) { - throw new Error('重试次数不能为负数'); - } - if (config.retryInterval !== undefined && config.retryInterval < 0) { - throw new Error('重试间不能为负数'); - } - return true; - } - - // 处理配置保存 - const handleConfigSave = async () => { - try { - const values = await form.validateFields(); - if (currentNode) { - const data = currentNode.getData() as NodeData; - const {name, description, ...config} = values; - - // 如果是Shell节点,验证配置 - if (data.type === 'SHELL' && config.executor === 'SHELL') { - validateShellConfig(config); - } - - // 更新节点数据 - currentNode.setData({ - ...data, - name, - description, - config, - }); - - // 更新节点标签 - currentNode.setAttrByPath('label/text', name); - - message.success('配置保存成功'); - setConfigVisible(false); - } - } catch (error) { - // 表单验证失败或Shell配置验证失败 - message.error((error as Error).message); - } - }; - - // 获取详情 - const fetchDetail = async () => { - if (!id) return; - setLoading(true); - try { - const response = await getDefinition(parseInt(id)); - if (response) { - setDetail(response); - } - } finally { - setLoading(false); - } - }; - - // 处理保存 - const handleSave = async () => { - if (!id || !detail || !graphRef.current || detail.status !== WorkflowStatus.DRAFT) return; - - try { - // 验证流程 - const result = validateFlow(graphRef.current); - const hasCycleResult = hasCycle(graphRef.current); - - if (hasCycleResult) { - message.error('流程图中存在循环,请检查'); - return; - } - - if (!result.valid) { - message.error(result.errors.join('\n')); - return; - } - - const graphData = graphRef.current.toJSON(); - const workflowGraph = convertGraphToWorkflowGraph(graphData); - - // 构建更新数据 - const data = { - ...detail, - graph: workflowGraph, - bpmnJson: graphData - }; - - await updateDefinition(parseInt(id), data); - message.success('保存成功'); - } catch (error) { - message.error('保存失败'); - console.error('保存失败:', error); - } - }; - - // 处理返回 - const handleBack = () => { - navigate('/workflow/definition'); - }; - - // 首次加载 - useEffect(() => { - fetchDetail(); - }, [id]); - - // 处理节点拖拽开始 - const handleNodeDragStart = (nodeType: NodeType) => { - draggedNodeRef.current = nodeType; - }; - - // 加载流程图数据 - const loadGraphData = (graph: Graph, detail: WorkflowDefinition) => { - try { - console.log('Loading graph data:', detail); - if (detail.graph) { - const cells = [ - ...detail.graph.nodes.map(node => ({ - id: node.id, - shape: getNodeShape(node.type), - attrs: generateNodeStyle(node.type, node.name || node.type), - data: { - type: node.type, - config: node.config - }, - position: node.position, - size: node.size // 直接使用数据中的 size - })), - ...detail.graph.edges.map(edge => ({ - id: edge.id, - shape: 'edge', - source: edge.source, - target: edge.target, - data: { - type: 'edge', - label: edge.name, - config: edge.config - } - })) - ]; - graph.fromJSON({ cells }); - } - } catch (error) { - console.error('加载流程图数据失败:', error); - message.error('加载流程图数据失败'); - } - }; - - // 添加连线配置处理函数 - const handleEdgeConfig = (edge: Edge) => { - setCurrentEdge(edge); - const data = edge.getData() || {}; - edgeForm.setFieldsValue(data); - setEdgeConfigVisible(true); - }; - - // 添加连线配置保存函数 - const handleEdgeConfigSubmit = async () => { - if (!currentEdge) return; - - try { - const values = await edgeForm.validateFields(); - currentEdge.setData(values); - - // 更新连线标签 - if (values.description) { - currentEdge.setLabelAt(0, values.description); - } - - setEdgeConfigVisible(false); - } catch (error) { - // 表单验证失败 - } - }; - - // 监听画布大小变化 - useEffect(() => { - if (!containerRef.current) return; - - const resizeObserver = new ResizeObserver(() => { - if (graphRef.current) { - const container = containerRef.current; - if (container) { - const { width, height } = container.getBoundingClientRect(); - graphRef.current.resize(width, height); - } - } - }); - - resizeObserver.observe(containerRef.current); - - return () => { - resizeObserver.disconnect(); - }; - }, []); - - // 转换图形数据为工作流图数据 - const convertGraphToWorkflowGraph = (graphData: any): WorkflowGraph => { - const nodes = graphData.cells - .filter((cell: any) => cell.shape !== 'edge') - .map((node: any) => ({ - id: node.id, - type: node.data.type, - name: node.data?.name || '', - position: node.position, - size: node.size, - config: node.data?.config || {} - })); - - const edges = graphData.cells - .filter((cell: any) => cell.shape === 'edge') - .map((edge: any) => ({ - id: edge.id, - source: edge.source.cell, - target: edge.target.cell, - name: edge.data?.name || '', - config: edge.data?.config || {} - })); - - return { nodes, edges }; - }; - - if (loading) { - return ( -
- -
- ); - } - - return ( - - - - - - - } - className="workflow-designer" - > - - - - - - - -
-
- { - domEvent.stopPropagation(); - }, - }} - open={contextMenu.visible} - trigger={['contextMenu']} - > -
- - - - - - setConfigVisible(false)} - extra={ - - - - - } - > - {currentNodeType && ( - - )} - - - setEdgeConfigVisible(false)} - open={edgeConfigVisible} - extra={ - - - - - } - > - {currentEdge && ( - { - if (changedValues.description) { - currentEdge.setLabelAt(0, changedValues.description); - } - }} - /> - )} - - - ); -}; - -export default FlowDesigner; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/Designer/service.ts b/frontend/src/pages/Workflow/Definition/Designer/service.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/frontend/src/pages/Workflow/Definition/Designer/types.ts b/frontend/src/pages/Workflow/Definition/Designer/types.ts deleted file mode 100644 index 1c3b238a..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/types.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * 位置信息 - */ -export interface Position { - x: number; - y: number; -} - -/** - * 尺寸信息 - */ -export interface Size { - width: number; - height: number; -} - -/** - * 节点类型枚举 - */ -export enum NodeType { - START = 'startEvent', - END = 'endEvent', - USER_TASK = 'userTask', - SERVICE_TASK = 'serviceTask', - SCRIPT_TASK = 'scriptTask', - EXCLUSIVE_GATEWAY = 'exclusiveGateway', - PARALLEL_GATEWAY = 'parallelGateway', - SUBPROCESS = 'subProcess', - CALL_ACTIVITY = 'callActivity' -} - -/** - * 节点配置 - */ -export interface NodeConfig { - size?: Size; - shape?: 'circle' | 'rect' | 'polygon'; - theme?: { - fill: string; - stroke: string; - }; - label?: string; - extras?: { - rx?: number; - ry?: number; - icon?: { - 'xlink:href': string; - width: number; - height: number; - x: number; - y: number; - }; - }; - assignee?: string; - candidateUsers?: string[]; - candidateGroups?: string[]; - dueDate?: string; - priority?: number; - formKey?: string; - executor?: string; - retryTimes?: number; - retryInterval?: number; - script?: string; - timeout?: number; - workingDirectory?: string; - environment?: string; - successExitCode?: string; - [key: string]: any; -} - - -/** - * 工作流节点 - */ -export interface WorkflowNode { - id: string; - type: NodeType; - name: string; - position: Position; - size: Size; - config?: NodeConfig; - properties?: Record; -} - -/** - * 工作流边 - */ -export interface WorkflowEdge { - id: string; - source: string; - target: string; - sourcePortId?: string; - targetPortId?: string; - name?: string; - condition?: string; - description?: string; - priority?: number; - config?: { - condition?: string; - expression?: string; - type?: 'sequence' | 'message' | 'association'; - [key: string]: any; - }; - properties?: Record; -} - -/** - * 工作流图形 - */ -export interface WorkflowGraph { - nodes: WorkflowNode[]; - edges: WorkflowEdge[]; - properties?: WorkflowProperties; -} - -/** - * 工作流属性 - */ -export interface WorkflowProperties { - name: string; - key?: string; - description?: string; - version?: number; - category?: string; -} - -/** - * 节点数据 - */ -export interface NodeData { - type: string; - name?: string; - description?: string; - config?: NodeConfig; -} - -/** - * 边数据 - */ -export interface EdgeData { - condition?: string; - description?: string; - priority?: number; -} diff --git a/frontend/src/pages/Workflow/Definition/Designer/utils/errors.ts b/frontend/src/pages/Workflow/Definition/Designer/utils/errors.ts deleted file mode 100644 index 7edb710e..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/utils/errors.ts +++ /dev/null @@ -1,24 +0,0 @@ -export class WorkflowError extends Error { - constructor(message: string, public code: string) { - super(message); - this.name = 'WorkflowError'; - } -} - -export class NodeConfigError extends WorkflowError { - constructor(message: string) { - super(message, 'NODE_CONFIG_ERROR'); - this.name = 'NodeConfigError'; - } -} - -export class NodeCreationError extends WorkflowError { - constructor(message: string) { - super(message, 'NODE_CREATION_ERROR'); - this.name = 'NodeCreationError'; - } -} - -export const isWorkflowError = (error: unknown): error is WorkflowError => { - return error instanceof WorkflowError; -}; diff --git a/frontend/src/pages/Workflow/Definition/Designer/utils/graphUtils.ts b/frontend/src/pages/Workflow/Definition/Designer/utils/graphUtils.ts deleted file mode 100644 index ac0fb661..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/utils/graphUtils.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { Graph, Node, Edge } from '@antv/x6'; -import { Selection } from '@antv/x6-plugin-selection'; -import { Keyboard } from '@antv/x6-plugin-keyboard'; -import { Clipboard } from '@antv/x6-plugin-clipboard'; -import { History } from '@antv/x6-plugin-history'; -import { Transform } from '@antv/x6-plugin-transform'; -import { Snapline } from '@antv/x6-plugin-snapline'; -import { MiniMap } from '@antv/x6-plugin-minimap'; -import { - NodeData, -} from '../types'; -import {WorkflowDefinition} from "@/pages/Workflow/Definition/types"; - -// Initialize graph with enhanced configuration -export const initGraph = ({ - container, - miniMapContainer, - onContextMenu, - onNodeClick, - onGraphChange, - onDragOver, - onDrop, - flowDetail -}: { - container: HTMLDivElement; - miniMapContainer: HTMLElement; - onContextMenu: (params: any) => void; - onNodeClick: (node: Node) => void; - onGraphChange: (graph: Graph) => void; - onDragOver: (e: DragEvent) => void; - onDrop: (e: DragEvent) => void; - flowDetail?: WorkflowDefinition; -}): Graph => { - const graph = new Graph({ - container, - grid: { - size: 10, - visible: true, - type: 'mesh', - args: { - color: '#cccccc', - thickness: 1, - }, - }, - mousewheel: { - enabled: true, - modifiers: [], - minScale: 0.2, - maxScale: 2, - factor: 1.1, - }, - scroller: { - enabled: true, - pannable: true, - autoResize: true, - padding: 50, - }, - panning: { - enabled: true, - eventTypes: ['rightMouseDown'], - }, - connecting: { - snap: true, - allowBlank: false, - allowLoop: false, - allowNode: false, - allowEdge: false, - connector: { - name: 'rounded', - args: { - radius: 8, - }, - }, - router: { - name: 'manhattan', - args: { - padding: 1, - }, - }, - validateConnection({sourceCell, targetCell, sourceMagnet, targetMagnet}) { - if (sourceCell === targetCell) { - return false; - } - if (!sourceMagnet || !targetMagnet) { - return false; - } - return true; - }, - }, - defaultEdge: { - attrs: { - line: { - stroke: '#5F95FF', - strokeWidth: 1, - targetMarker: { - name: 'classic', - size: 8, - }, - }, - }, - router: { - name: 'manhattan', - args: { - padding: 1, - }, - }, - connector: { - name: 'rounded', - args: { - radius: 8, - }, - }, - }, - highlighting: { - magnetAvailable: { - name: 'stroke', - args: { - padding: 4, - attrs: { - strokeWidth: 4, - stroke: '#52c41a', - }, - }, - }, - magnetAdsorbed: { - name: 'stroke', - args: { - padding: 4, - attrs: { - strokeWidth: 4, - stroke: '#1890ff', - }, - }, - }, - }, - keyboard: true, - clipboard: true, - history: true, - selecting: { - enabled: true, - multiple: true, - rubberband: true, - movable: true, - showNodeSelectionBox: true, - }, - snapline: true, - background: { - color: '#ffffff', - }, - }); - - // Enable plugins with enhanced configuration - graph.use( - new Selection({ - enabled: true, - multiple: true, - rubberband: true, - rubberEdge: true, - movable: true, - showNodeSelectionBox: true, - showEdgeSelectionBox: true, - selectCellOnMoved: false, - selectEdgeOnMoved: false, - selectNodeOnMoved: false, - className: 'node-selected', - strict: true, - }) - ); - - // Initialize other plugins - graph.use(new Keyboard({ enabled: true })); - graph.use(new Clipboard({ enabled: true })); - graph.use(new History({ enabled: true })); - graph.use( - new Transform({ - resizing: { - enabled: true, - minWidth: 1, - minHeight: 1, - orthogonal: true, - restricted: true, - }, - rotating: { - enabled: true, - grid: 15, - }, - }) - ); - graph.use(new Snapline({ enabled: true })); - - // Initialize minimap if container provided - if (miniMapContainer) { - graph.use( - new MiniMap({ - container: miniMapContainer, - width: 200, - height: 150, - padding: 20, - scalable: true, - minScale: 0.1, - maxScale: 3, - fitToContent: true, - viewport: { - padding: 10, - fitOnViewportChanged: true, - }, - graphOptions: { - async: true, - grid: false, - background: { color: '#f5f5f5' }, - interacting: { nodeMovable: false }, - connecting: { enabled: false }, - }, - }) - ); - - // Update minimap on graph changes - graph.on('scale translate', () => { - if (graph.minimap) { - graph.minimap.updateViewport(); - graph.minimap.scaleTo(0.1); - graph.minimap.centerContent(); - } - }); - } - - // Event listeners - container.addEventListener('mousedown', (e: MouseEvent) => { - if (e.button === 2) e.preventDefault(); - }); - - container.addEventListener('contextmenu', (e: Event) => { - e.preventDefault(); - }); - - // Graph events - graph.on('cell:contextmenu', ({ cell, e }) => { - e.preventDefault(); - onContextMenu({ - x: e.clientX, - y: e.clientY, - visible: true, - type: cell.isNode() ? 'node' : 'edge', - cell, - }); - }); - - graph.on('blank:contextmenu', ({ e }) => { - e.preventDefault(); - onContextMenu({ - x: e.clientX, - y: e.clientY, - visible: true, - type: 'canvas', - }); - }); - - graph.on('blank:click cell:click', () => { - onContextMenu({ visible: false, x: 0, y: 0, type: 'canvas' }); - }); - - graph.on('node:dblclick', ({ node }) => { - onNodeClick(node); - }); - - graph.on('selection:changed', () => { - onGraphChange(graph); - }); - - // Drag and drop handlers - container.addEventListener('dragover', onDragOver); - container.addEventListener('drop', onDrop); - - // Load initial data if provided - if (flowDetail?.graphDefinition) { - const graphData = JSON.parse(flowDetail.graphDefinition); - graph.fromJSON(graphData); - requestAnimationFrame(() => { - graph.zoomToFit({ padding: 50, maxScale: 1 }); - graph.centerContent(); - }); - } - - return graph; -}; - -// Load graph data -export const loadGraphData = (graph: Graph, data: GraphData) => { - graph.clearCells(); - - // Load nodes - data.nodes.forEach((nodeData) => { - graph.addNode({ - id: nodeData.id, - shape: 'react-shape', - x: nodeData.position.x, - y: nodeData.position.y, - width: nodeData.size.width, - height: nodeData.size.height, - attrs: generateNodeStyle(nodeData.type, nodeData.name), - ports: generatePorts(nodeData.type), - data: nodeData, - }); - }); - - // Load edges - data.edges.forEach((edgeData) => { - graph.addEdge({ - id: edgeData.id, - source: edgeData.source, - target: edgeData.target, - attrs: generateEdgeStyle(edgeData), - data: edgeData, - }); - }); -}; - -// Generate edge style -export const generateEdgeStyle = (edgeData: EdgeData): EdgeStyle => { - return { - line: { - stroke: '#5F95FF', - strokeWidth: 2, - targetMarker: { - name: 'classic', - size: 8, - }, - }, - label: edgeData.name - ? { - text: edgeData.name, - fill: '#333', - fontSize: 12, - } - : undefined, - }; -}; - -// Export graph data -export const exportGraphData = (graph: Graph): GraphData => { - return { - nodes: graph.getNodes().map((node) => node.getData() as NodeData), - edges: graph.getEdges().map((edge) => edge.getData() as EdgeData), - properties: {}, - }; -}; - -// Validate graph data -export const validateGraphData = (graphData: GraphData): string[] => { - const errors: string[] = []; - - // Validate start node - const startNodes = graphData.nodes.filter( - (node) => node.type === 'startEvent' - ); - if (startNodes.length !== 1) { - errors.push('必须有且仅有一个开始节点'); - } - - // Validate end nodes - const endNodes = graphData.nodes.filter((node) => node.type === 'endEvent'); - if (endNodes.length === 0) { - errors.push('必须至少有一个结束节点'); - } - - // Validate node connections - graphData.nodes.forEach((node) => { - if (node.type !== 'endEvent') { - const outgoingEdges = graphData.edges.filter( - (edge) => edge.source === node.id - ); - if (outgoingEdges.length === 0) { - errors.push(`节点 "${node.name}" 没有出边`); - } - } - }); - - return errors; -}; diff --git a/frontend/src/pages/Workflow/Definition/Designer/utils/nodeUtils.ts b/frontend/src/pages/Workflow/Definition/Designer/utils/nodeUtils.ts deleted file mode 100644 index d3ce590e..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/utils/nodeUtils.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { Position, Size, NodeType, NodeData, GraphConfig, PortGroup, GraphAttrs } from '../types'; -import { NodeConfigError } from './errors'; - -interface CanvasMatrix { - scale: number; - offsetX: number; - offsetY: number; -} - -export const calculateCanvasPosition = ( - clientX: number, - clientY: number, - containerRect: DOMRect, - matrix: CanvasMatrix -): Position => { - const point: Position = { - x: clientX - containerRect.left, - y: clientY - containerRect.top, - }; - - return { - x: (point.x - matrix.offsetX) / matrix.scale, - y: (point.y - matrix.offsetY) / matrix.scale, - }; -}; - -// 获取节点形状 -export const getNodeShape = (nodeType: string): GraphConfig['shape'] => { - switch (nodeType) { - case 'startEvent': - case 'endEvent': - return 'circle'; - case 'exclusiveGateway': - case 'parallelGateway': - return 'diamond'; - case 'userTask': - case 'serviceTask': - case 'shellTask': - return 'rect'; - default: - return 'rect'; - } -}; - -// 节点图标映射 -const NODE_ICONS: Record = { - startEvent: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NTM1NDY5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQxNjEiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNTEyIDY0QzI2NC42IDY0IDY0IDI2NC42IDY0IDUxMnMyMDAuNiA0NDggNDQ4IDQ0OCA0NDgtMjAwLjYgNDQ4LTQ0OFM3NTkuNCA2NCA1MTIgNjR6bTE5MiAzMzZjMCA0LjQtMy42IDgtOCA4SDU0NHYxNTJjMCA0LjQtMy42IDgtOCA4aC00OGMtNC40IDAtOC0zLjYtOC04VjQwOEgzMjhjLTQuNCAwLTgtMy42LTgtOHYtNDhjMC00LjQgMy42LTggOC04aDE1MlYxOTJjMC00LjQgMy42LTggOC04aDQ4YzQuNCAwIDggMy42IDggOHYxNTJoMTUyYzQuNCAwIDggMy42IDggOHY0OHoiIGZpbGw9IiM1MmM0MWEiIHAtaWQ9IjQxNjIiPjwvcGF0aD48L3N2Zz4=', - endEvent: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NTM1NDY5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQxNjEiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNTEyIDY0QzI2NC42IDY0IDY0IDI2NC42IDY0IDUxMnMyMDAuNiA0NDggNDQ4IDQ0OCA0NDgtMjAwLjYgNDQ4LTQ0OFM3NTkuNCA2NCA1MTIgNjR6bTE5MiAyODhjMCA0LjQtMy42IDgtOCA4SDMyOGMtNC40IDAtOC0zLjYtOC04di00OGMwLTQuNCAzLjYtOCA4LThoMzY4YzQuNCAwIDggMy42IDggOHY0OHoiIGZpbGw9IiNmZjRkNGYiIHAtaWQ9IjQxNjIiPjwvcGF0aD48L3N2Zz4=', - userTask: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NTM1NDY5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQxNjEiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNODU4LjUgNzYzLjZjLTE4LjktMjYuMi00Ny45LTQxLjctNzkuOS00MS43SDI0Ni40Yy0zMiAwLTYxIDI1LjUtNzkuOSA0MS43LTE4LjkgMTYuMi0yOS45IDM3LjItMjkuOSA1OS42IDAgMjIuNCAyNi44IDQwLjYgNTkuOCA0MC42aDYzMi4yYzMzIDAgNTkuOC0xOC4yIDU5LjgtNDAuNiAwLTIyLjQtMTEtNDMuNC0yOS45LTU5LjZ6TTUxMiAyNTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBzLTcxLjYgMTYwLTE2MCAxNjAtMTYwLTcxLjYtMTYwLTE2MCA3MS42LTE2MCAxNjAtMTYweiIgZmlsbD0iI2ZhOGMxNiIgcC1pZD0iNDE2MiI+PC9wYXRoPjwvc3ZnPg==', - shellTask: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NTM1NDY5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQxNjEiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNMTYwIDI1NnY1MTJoNzA0VjI1NkgxNjB6IG02NDAgNDQ4SDE5MlYyODhoNjA4djQxNnpNMjI0IDQ4MGwxMjgtMTI4IDQ1LjMgNDUuMy04Mi43IDgyLjcgODIuNyA4Mi43TDM1MiA2MDhsLTEyOC0xMjh6IG0yMzEuMSAxOTBsLTQ1LjMtNDUuMyAxNTItMTUyIDQ1LjMgNDUuM2wtMTUyIDE1MnoiIGZpbGw9IiMxODkwZmYiIHAtaWQ9IjQxNjIiPjwvcGF0aD48L3N2Zz4=', - exclusiveGateway: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NzAzODY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY1NTUiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNzgyLjcgNDQxLjRMNTQ1IDMwNC44YzAuMy0wLjMgMC40LTAuNyAwLjctMUw3ODIuNyA0NDEuNHogbTExOC45IDQzMi45TDIxNy43IDE1OC4xQzIwMi4xIDE0Mi41IDE3NiAxNDIuNSAxNjAuNCAxNTguMWMtMTUuNiAxNS42LTE1LjYgNDEuNyAwIDU3LjNsNjgzLjkgNzE2LjJjMTUuNiAxNS42IDQxLjcgMTUuNiA1Ny4zIDBzMTUuNi00MS43IDAtNTcuM3ogbS00MjYtMjQuNmMtMC4zIDAuMy0wLjQgMC43LTAuNyAxTDIzNy42IDU4Mi42YzAuMy0wLjMgMC40LTAuNyAwLjctMWwyMzcuMyAyNjguMXogbTIzNy4zLTI2Ny4xTDQ3NS42IDg1MC43YzAuMy0wLjMgMC40LTAuNyAwLjctMUw3MTMuNiA1ODIuNnoiIGZpbGw9IiM3MjJlZDEiIHAtaWQ9IjY1NTYiPjwvcGF0aD48L3N2Zz4=', - parallelGateway: 'data:image/svg+xml;base64,PHN2ZyB0PSIxNzAzODQ4NzAzODY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY1NTUiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNNDAwIDUwMEg0MDB2MjAwSDEwMFY1MDB6IiBmaWxsPSIjNzIyZWQxIiBwLWlkPSI2NTU2Ij48L3BhdGg+PC9zdmc+', -}; - -// 节点主题映射 -const NODE_THEMES: Record = { - startEvent: { fill: '#f6ffed', stroke: '#52c41a' }, - endEvent: { fill: '#fff1f0', stroke: '#ff4d4f' }, - userTask: { fill: '#fff7e6', stroke: '#fa8c16' }, - shellTask: { fill: '#e6f7ff', stroke: '#1890ff' }, - exclusiveGateway: { fill: '#f9f0ff', stroke: '#722ed1' }, - parallelGateway: { fill: '#f9f0ff', stroke: '#722ed1' }, -}; - -// 生成节点样式 -export const generateNodeStyle = (nodeType: string, label?: string): GraphAttrs => { - const theme = NODE_THEMES[nodeType] || { fill: '#ffffff', stroke: '#333333' }; - const shape = getNodeShape(nodeType); - const icon = NODE_ICONS[nodeType]; - - const style: GraphAttrs = { - body: { - fill: theme.fill, - stroke: theme.stroke, - strokeWidth: nodeType === 'endEvent' ? 4 : 2, - }, - label: { - text: label || '', - fill: '#333333', - fontSize: 12, - }, - }; - - if (icon) { - style.image = { - 'xlink:href': icon, - width: 16, - height: 16, - x: shape === 'circle' ? 12 : 8, - y: shape === 'circle' ? 12 : 8, - }; - } - - return style; -}; - -// 生成端口配置 -export const generatePorts = (nodeType: string): { groups: Record } => { - const defaultPortGroup: PortGroup = { - position: 'top', - attrs: { - circle: { - r: 4, - magnet: true, - stroke: '#5F95FF', - strokeWidth: 1, - fill: '#fff', - }, - }, - }; - - return { - groups: { - top: { ...defaultPortGroup, position: 'top' }, - right: { ...defaultPortGroup, position: 'right' }, - bottom: { ...defaultPortGroup, position: 'bottom' }, - left: { ...defaultPortGroup, position: 'left' }, - }, - }; -}; - -// 计算节点位置 -export const calculateNodePosition = (nodeType: string, dropPosition: Position): Position => { - const shape = getNodeShape(nodeType); - const size = getNodeSize(nodeType); - - // 调整位置使节点中心对齐到鼠标位置 - return { - x: dropPosition.x - size.width / 2, - y: dropPosition.y - size.height / 2, - }; -}; - -// 获取节点大小 -export const getNodeSize = (nodeType: string): Size => { - switch (nodeType) { - case 'startEvent': - case 'endEvent': - return { width: 40, height: 40 }; - case 'exclusiveGateway': - case 'parallelGateway': - return { width: 60, height: 60 }; - case 'userTask': - case 'serviceTask': - case 'shellTask': - return { width: 120, height: 60 }; - default: - return { width: 100, height: 50 }; - } -}; - -// 创建节点数据 -export const createNodeData = ( - nodeType: NodeType, - id: string, - position: Position, - name?: string -): NodeData => { - return { - id, - type: nodeType.type, - name: name || nodeType.name, - position, - size: getNodeSize(nodeType.type), - config: { - type: nodeType.type, - ...JSON.parse(nodeType.flowableConfig || '{}'), - }, - properties: {}, - }; -}; - -// 验证节点配置 -export const validateNodeConfig = (nodeData: NodeData, nodeType: NodeType): string[] => { - const errors: string[] = []; - - // 验证必填属性 - if (!nodeData.name) { - errors.push('节点名称不能为空'); - } - - // 验证表单配置 - const formConfig = nodeType.formConfig; - if (formConfig?.properties) { - formConfig.properties.forEach(prop => { - if (prop.required && !nodeData.config[prop.name]) { - errors.push(`${prop.label}不能为空`); - } - }); - } - - return errors; -}; diff --git a/frontend/src/pages/Workflow/Definition/Designer/validate.ts b/frontend/src/pages/Workflow/Definition/Designer/validate.ts deleted file mode 100644 index 8f41eeca..00000000 --- a/frontend/src/pages/Workflow/Definition/Designer/validate.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { Graph } from '@antv/x6'; -import { NodeType } from './types'; - -export interface ValidationResult { - valid: boolean; - errors: string[]; -} - -export const validateFlow = (graph: Graph): ValidationResult => { - const result: ValidationResult = { - valid: true, - errors: [], - }; - - const nodes = graph.getNodes(); - const edges = graph.getEdges(); - - // 验证是否有节点 - if (nodes.length === 0) { - result.errors.push('流程必须包含至少一个节点'); - result.valid = false; - return result; - } - - // 验证开始节点 - const startNodes = nodes.filter(node => node.getData()?.type === NodeType.START); - if (startNodes.length === 0) { - result.errors.push('流程必须包含一个开始节点'); - result.valid = false; - } else if (startNodes.length > 1) { - result.errors.push('流程只能包含一个开始节点'); - result.valid = false; - } - - // 验证结束节点 - const endNodes = nodes.filter(node => node.getData()?.type === NodeType.END); - if (endNodes.length === 0) { - result.errors.push('流程必须包含至少一个结束节点'); - result.valid = false; - } else if (endNodes.length > 1) { - result.errors.push('流程只能包含一个结束节点'); - result.valid = false; - } - - // 验证孤立节点 - nodes.forEach(node => { - const incomingEdges = graph.getIncomingEdges(node) || []; - const outgoingEdges = graph.getOutgoingEdges(node) || []; - const nodeData = node.getData(); - const nodeType = nodeData?.type; - const nodeName = nodeData?.name || '未命名'; - - if (nodeType === NodeType.START && incomingEdges.length > 0) { - result.errors.push('开始节点不能有入边'); - result.valid = false; - } - - if (nodeType === NodeType.END && outgoingEdges.length > 0) { - result.errors.push('结束节点不能有出边'); - result.valid = false; - } - - if (nodeType !== NodeType.START && nodeType !== NodeType.END && - (incomingEdges.length === 0 || outgoingEdges.length === 0)) { - result.errors.push(`节点 "${nodeName}" 未完全连接`); - result.valid = false; - } - }); - - // 验证网关配对 - const validateGateways = () => { - const exclusiveGateways = nodes.filter( - node => node.getData()?.type === NodeType.EXCLUSIVE_GATEWAY - ); - const parallelGateways = nodes.filter( - node => node.getData()?.type === NodeType.PARALLEL_GATEWAY - ); - - // 验证排他网关 - exclusiveGateways.forEach(gateway => { - const outgoingEdges = graph.getOutgoingEdges(gateway) || []; - const incomingEdges = graph.getIncomingEdges(gateway) || []; - const gatewayData = gateway.getData(); - const gatewayName = gatewayData?.name || '未命名'; - - if (outgoingEdges.length < 2) { - result.errors.push(`排他网关 "${gatewayName}" 必须至少有两个出口`); - result.valid = false; - } - - if (incomingEdges.length < 1) { - result.errors.push(`排他网关 "${gatewayName}" 必须至少有一个入口`); - result.valid = false; - } - }); - - // 验证并行网关 - parallelGateways.forEach(gateway => { - const outgoingEdges = graph.getOutgoingEdges(gateway) || []; - const incomingEdges = graph.getIncomingEdges(gateway) || []; - const gatewayData = gateway.getData(); - const gatewayName = gatewayData?.name || '未命名'; - - if (outgoingEdges.length < 2) { - result.errors.push(`并行网关 "${gatewayName}" 必须至少有两个出口`); - result.valid = false; - } - - if (incomingEdges.length < 1) { - result.errors.push(`并行网关 "${gatewayName}" 必须至少有一个入口`); - result.valid = false; - } - }); - }; - validateGateways(); - - return result; -}; - -// 检查是否存在环路 -export const hasCycle = (graph: Graph): boolean => { - const visited = new Set(); - const recursionStack = new Set(); - - const dfs = (nodeId: string): boolean => { - visited.add(nodeId); - recursionStack.add(nodeId); - - const outgoingEdges = graph.getOutgoingEdges(nodeId); - if (outgoingEdges) { - for (const edge of outgoingEdges) { - const targetId = edge.getTargetCellId(); - if (!visited.has(targetId)) { - if (dfs(targetId)) { - return true; - } - } else if (recursionStack.has(targetId)) { - return true; - } - } - } - - recursionStack.delete(nodeId); - return false; - }; - - const nodes = graph.getNodes(); - for (const node of nodes) { - if (!visited.has(node.id) && dfs(node.id)) { - return true; - } - } - - return false; -}; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/List/index.tsx b/frontend/src/pages/Workflow/Definition/List/index.tsx new file mode 100644 index 00000000..8d293ea4 --- /dev/null +++ b/frontend/src/pages/Workflow/Definition/List/index.tsx @@ -0,0 +1,100 @@ +import React from 'react'; +import { Table, Card, Button, Space, Tag, message } from 'antd'; +import { PlusOutlined } from '@ant-design/icons'; +import { useRequest } from 'ahooks'; +import { history } from 'umi'; +import { queryWorkflowDefinitions } from './service'; + +const WorkflowDefinitionList: React.FC = () => { + const { data, loading, refresh } = useRequest(queryWorkflowDefinitions, { + defaultParams: [{ current: 1, pageSize: 10 }], + }); + + const columns = [ + { + title: '流程名称', + dataIndex: 'name', + key: 'name', + render: (text: string, record: any) => ( + history.push(`/workflow/definition/detail/${record.id}`)}>{text} + ), + }, + { + title: '流程标识', + dataIndex: 'key', + key: 'key', + }, + { + title: '版本', + dataIndex: 'flowVersion', + key: 'flowVersion', + }, + { + title: '状态', + dataIndex: 'status', + key: 'status', + render: (status: string) => ( + + {status === 'DRAFT' ? '草稿' : '已发布'} + + ), + }, + { + title: '描述', + dataIndex: 'description', + key: 'description', + ellipsis: true, + }, + { + title: '操作', + key: 'action', + render: (_: any, record: any) => ( + + history.push(`/workflow/definition/edit/${record.id}`)}>编辑 + handleDeploy(record.id)}>发布 + handleDelete(record.id)}>删除 + + ), + }, + ]; + + const handleDeploy = async (id: number) => { + message.success('发布成功'); + refresh(); + }; + + const handleDelete = async (id: number) => { + message.success('删除成功'); + refresh(); + }; + + return ( + } + onClick={() => history.push('/workflow/definition/create')} + > + 新建流程 + + } + > + + + ); +}; + +export default WorkflowDefinitionList; diff --git a/frontend/src/pages/Workflow/Definition/index.tsx b/frontend/src/pages/Workflow/Definition/index.tsx deleted file mode 100644 index ed4fcb4c..00000000 --- a/frontend/src/pages/Workflow/Definition/index.tsx +++ /dev/null @@ -1,412 +0,0 @@ -import React, {useEffect, useState} from 'react'; -import {Button, Card, Form, Input, message, Modal, Select, Space, Table, Tag} from 'antd'; -import {useNavigate} from 'react-router-dom'; -import { - createDefinition, - updateDefinition, - deleteDefinition, - disableDefinition, - enableDefinition, - getDefinitions, - publishDefinition -} from '../service'; -import { - WorkflowDefinition, - WorkflowStatus, - WorkflowDefinitionBase -} from '../types'; -import {DeleteOutlined, PlusOutlined} from '@ant-design/icons'; - -const {confirm} = Modal; - -const WorkflowDefinitionList: React.FC = () => { - const navigate = useNavigate(); - const [form] = Form.useForm(); - const [loading, setLoading] = useState(false); - const [list, setList] = useState([]); - const [total, setTotal] = useState(0); - const [current, setCurrent] = useState(1); - const [size, setSize] = useState(10); - const [createModalVisible, setCreateModalVisible] = useState(false); - const [editingRecord, setEditingRecord] = useState(null); - - // 获取列表数据 - const fetchList = async (page = current, pageSize = size) => { - setLoading(true); - try { - const params = { - page: page - 1, // 后端页码从0开始 - size: pageSize, - ...form.getFieldsValue() - }; - const response = await getDefinitions(params); - if (response?.content) { - setList(response.content); - setTotal(response.totalElements); - } - } finally { - setLoading(false); - } - }; - - // 首次加载 - useEffect(() => { - fetchList(); - }, []); - - // 处理表格变化 - const handleTableChange = (pagination: any) => { - setCurrent(pagination.current); - setSize(pagination.pageSize); - fetchList(pagination.current, pagination.pageSize); - }; - - // 处理搜索 - const handleSearch = () => { - setCurrent(1); - fetchList(1); - }; - - // 处理重置 - const handleReset = () => { - form.resetFields(); - setCurrent(1); - fetchList(1); - }; - - // 处理创建或更新 - const handleSubmit = async (values: WorkflowDefinitionBase) => { - try { - if (editingRecord) { - // 更新流程 - const updateData = { - ...values, - status: editingRecord.status, - flowVersion: editingRecord.flowVersion - }; - await updateDefinition(editingRecord.id, updateData); - message.success('更新成功'); - } else { - // 创建流程 - const data = { - ...values, - status: WorkflowStatus.DRAFT, - flowVersion: 1 - }; - await createDefinition(data); - message.success('创建成功'); - } - setCreateModalVisible(false); - setEditingRecord(null); - form.resetFields(); - fetchList(); - } catch (error) { - // 错误已在请求拦截器中处理 - } - }; - - // 处理弹窗关闭 - const handleModalClose = () => { - setCreateModalVisible(false); - setEditingRecord(null); - form.resetFields(); - }; - - // 处理删除 - const handleDelete = (record: WorkflowDefinition) => { - confirm({ - title: '确认删除', - content: `确定要删除工作流"${record.name}"吗?`, - onOk: async () => { - try { - await deleteDefinition(record.id); - message.success('删除成功'); - fetchList(); - } catch (error) { - // 错误已在请求拦截器中处理 - } - } - }); - }; - - // 处理发布 - const handlePublish = async (record: WorkflowDefinition) => { - try { - await publishDefinition(record.id); - message.success('发布成功'); - fetchList(); - } catch (error) { - // 错误已在请求拦截器中处理 - } - }; - - // 处理启用/禁用 - const handleToggleEnable = async (record: WorkflowDefinition) => { - try { - if (record.enabled) { - await disableDefinition(record.id); - message.success('禁用成功'); - } else { - await enableDefinition(record.id); - message.success('启用成功'); - } - fetchList(); - } catch (error) { - // 错误已在请求拦截器中处理 - } - }; - - // 处理编辑 - const handleEdit = (record: WorkflowDefinition) => { - setEditingRecord(record); - form.setFieldsValue({ - key: record.key, - name: record.name, - description: record.description - }); - setCreateModalVisible(true); - }; - - // 表格列定义 - const columns = [ - { - title: 'ID', - dataIndex: 'id', - key: 'id', - width: 80, - }, - { - title: '名称', - dataIndex: 'name', - key: 'name', - width: 150, - ellipsis: true, - }, - { - title: '标识', - dataIndex: 'key', - key: 'key', - width: 150, - ellipsis: true, - }, - { - title: '版本', - dataIndex: 'flowVersion', - key: 'flowVersion', - width: 80, - }, - { - title: '状态', - dataIndex: 'status', - key: 'status', - width: 100, - render: (status: WorkflowStatus) => { - const statusMap = { - [WorkflowStatus.DRAFT]: {color: 'default', text: '草稿'}, - [WorkflowStatus.PUBLISHED]: {color: 'success', text: '已发布'}, - [WorkflowStatus.DISABLED]: {color: 'error', text: '已禁用'}, - }; - const {color, text} = statusMap[status]; - return {text}; - }, - }, - { - title: '描述', - dataIndex: 'description', - key: 'description', - width: 200, - ellipsis: true, - }, - { - title: '创建时间', - dataIndex: 'createTime', - key: 'createTime', - width: 180, - }, - { - title: '创建人', - dataIndex: 'createBy', - key: 'createBy', - width: 100, - }, - { - title: '更新时间', - dataIndex: 'updateTime', - key: 'updateTime', - width: 180, - }, - { - title: '更新人', - dataIndex: 'updateBy', - key: 'updateBy', - width: 100, - }, - { - title: '操作', - key: 'action', - fixed: 'right' as const, - width: 380, - render: (_: any, record: WorkflowDefinition) => ( - - {record.status === WorkflowStatus.DRAFT && ( - - )} - - {record.status === WorkflowStatus.DRAFT && ( - - )} - - - - ), - }, - ]; - - return ( - - {/* 搜索表单 */} -
- - - - - - - - - - - - - - - {/* 工具栏 */} -
- -
- - {/* 列表 */} -
- - {/* 创建/编辑表单弹窗 */} - -
- - - - - - - - - - - - - - - - -
- - ); -}; - -export default WorkflowDefinitionList; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/Definition/service.ts b/frontend/src/pages/Workflow/Definition/service.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/frontend/src/pages/Workflow/Definition/types.ts b/frontend/src/pages/Workflow/Definition/types.ts deleted file mode 100644 index b8f2948f..00000000 --- a/frontend/src/pages/Workflow/Definition/types.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { BaseResponse } from '@/types/base/response'; - -/** - * 节点图形配置 - */ -interface NodeGraphStyle { - fill: string; - stroke: string; - icon?: string; - iconColor?: string; - strokeWidth?: number; -} - -/** - * 节点端口组配置 - */ -interface PortGroup { - position: 'left' | 'right'; - attrs: { - circle: { - r: number; - fill: string; - stroke: string; - }; - }; -} - -/** - * 节点端口配置 - */ -interface NodePorts { - groups: { - in?: PortGroup; - out?: PortGroup; - }; - types: ('in' | 'out')[]; -} - -/** - * 节点图形定义 - */ -interface NodeGraph { - shape: 'circle' | 'rectangle'; - size: { - width: number; - height: number; - }; - style: NodeGraphStyle; - ports: NodePorts; -} - -/** - * 工作流节点配置 - */ -interface NodeConfig { - name: string; - description?: string; - script?: string; - language?: string; - [key: string]: any; -} - -/** - * 工作流节点定义 - */ -interface WorkflowNode { - id: string; - code: string; - type: string; - name: string; - graph: NodeGraph; - config: NodeConfig; -} - -/** - * 工作流边配置 - */ -interface EdgeConfig { - type: 'sequence'; - [key: string]: any; -} - -/** - * 工作流边定义 - */ -interface WorkflowEdge { - id: string; - from: string; - to: string; - name: string; - config: EdgeConfig; - properties?: Record; -} - -/** - * 工作流状态 - */ -export enum WorkflowStatus { - DRAFT = 'DRAFT', // 草稿 - PUBLISHED = 'PUBLISHED', // 已发布 - DISABLED = 'DISABLED' // 已禁用 -} - -/** - * 工作流图形定义 - */ -export interface WorkflowGraph { - nodes: WorkflowNode[]; - edges: WorkflowEdge[]; -} - -/** - * 工作流定义基本信息 - */ -export interface WorkflowDefinitionBase { - name: string; // 工作流名称 - key: string; // 工作流标识 - flowVersion?: number; // 流程版本 - description?: string; // 描述信息 -} - -/** - * 创建工作流定义请求 - */ -export interface CreateWorkflowDefinitionRequest extends WorkflowDefinitionBase { - status: WorkflowStatus; // 工作流状态 -} - -/** - * 更新工作流定义请求 - */ -export interface UpdateWorkflowDefinitionRequest extends WorkflowDefinitionBase { - -} - -/** - * 表单配置 - */ -export interface FormConfig { - formItems: any[]; // 表单项配置 -} - -/** - * 工作流定义 - */ -export interface WorkflowDefinition extends BaseResponse { - name: string; // 工作流名称 - key: string; // 工作流标识 - flowVersion: number; // 流程版本 - bpmnXml: string | null; // BPMN XML定义 - graph: WorkflowGraph; // 图形定义 - formConfig: FormConfig; // 表单配置 - status: WorkflowStatus; // 工作流状态 - description: string; // 描述信息 - deleted: boolean; // 是否删除 - extraData: any; // 扩展数据 -} - -/** - * 工作流配置的解析和序列化工具 - */ -export const WorkflowConfigUtils = { - /** - * 解析节点配置 - */ - parseNodeConfig: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {nodes: []}; - } - }, - - /** - * 解析转换配置 - */ - parseTransitionConfig: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {transitions: []}; - } - }, - - /** - * 解析表单定义 - */ - parseFormDefinition: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {}; - } - }, - - /** - * 解析图形定义 - */ - parseGraphDefinition: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {}; - } - } -}; - -// 导出NodePanel中的所有类型 -export * from './Designer/components/NodePanel/types'; \ No newline at end of file diff --git a/frontend/src/pages/Workflow/service.ts b/frontend/src/pages/Workflow/service.ts deleted file mode 100644 index 56e940c7..00000000 --- a/frontend/src/pages/Workflow/service.ts +++ /dev/null @@ -1,56 +0,0 @@ -import request from '../../utils/request'; -import { - CreateWorkflowDefinitionRequest, - UpdateWorkflowDefinitionRequest, - WorkflowDefinition, - WorkflowDefinitionPage, - WorkflowDefinitionQuery, - NodeType, - NodeTypeQuery -} from './types'; - -const WORKFLOW_DEFINITION_URL = '/api/v1/workflow/definition'; -const NODE_DEFINITION_URL = '/api/v1/workflow/node-definition'; - -// 创建工作流定义 -export const createDefinition = (data: CreateWorkflowDefinitionRequest) => - request.post(WORKFLOW_DEFINITION_URL, data); - -// 更新工作流定义 -export const updateDefinition = (id: number, data: UpdateWorkflowDefinitionRequest) => - request.put(`${WORKFLOW_DEFINITION_URL}/${id}`, data); - -// 获取工作流定义列表 -export const getDefinitions = (params?: WorkflowDefinitionQuery) => - request.get(`${WORKFLOW_DEFINITION_URL}/page`, { params }); - -// 获取工作流定义详情 -export const getDefinition = (id: number) => - request.get(`${WORKFLOW_DEFINITION_URL}/${id}`); - -// 删除工作流定义 -export const deleteDefinition = (id: number) => - request.delete(`${WORKFLOW_DEFINITION_URL}/${id}`); - -// 发布工作流定义 -export const publishDefinition = (id: number) => - request.post(`${WORKFLOW_DEFINITION_URL}/${id}/publish`); - -// 禁用工作流定义 -export const disableDefinition = (id: number) => - request.post(`${WORKFLOW_DEFINITION_URL}/${id}/disable`); - -// 启用工作流定义 -export const enableDefinition = (id: number) => - request.post(`${WORKFLOW_DEFINITION_URL}/${id}/enable`); - -// ���建新版本 -export const createVersion = (id: number) => - request.post(`${WORKFLOW_DEFINITION_URL}/${id}/versions`); - -// 获取节点类型列表 -export const getNodeTypes = (params?: NodeTypeQuery) => - request.get>(`${NODE_DEFINITION_URL}/page`, { params }); - -export const getNodeTypeExecutors = (code: string) => - request.get(`${NODE_DEFINITION_URL}/${code}/executors`); \ No newline at end of file diff --git a/frontend/src/pages/Workflow/types.ts b/frontend/src/pages/Workflow/types.ts deleted file mode 100644 index 47055e77..00000000 --- a/frontend/src/pages/Workflow/types.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Page } from '@/types/base'; -import { BaseQuery } from '@/types/base/query'; -import type { WorkflowDefinition, WorkflowStatus } from './Definition/types'; - -/** - * 工作流定义查询参数 - */ -export interface WorkflowDefinitionQuery extends BaseQuery { - keyword?: string; // 关键字搜索 - status?: WorkflowStatus; // 工作流状态 - enabled?: boolean; // 是否启用 -} - -/** - * 工作流定义分页响应 - */ -export type WorkflowDefinitionPage = Page; - -/** - * 节点类型查询参数 - */ -export interface NodeTypeQuery extends BaseQuery { - enabled?: boolean; // 是否启用 - category?: string; // 节点类别 -} - -// 重新导出工作流相关类型 -export type { WorkflowDefinition } from './Definition/types'; -export { WorkflowStatus } from './Definition/types'; diff --git a/frontend/src/pages/Workflow/utils.ts b/frontend/src/pages/Workflow/utils.ts deleted file mode 100644 index dfb56713..00000000 --- a/frontend/src/pages/Workflow/utils.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {NodeConfig, TransitionConfig} from './types'; - -// 工作流配置的解析和序列化工具 -export const WorkflowConfigUtils = { - parseNodeConfig: (config: string): NodeConfig => { - try { - return JSON.parse(config); - } catch { - return {nodes: []}; - } - }, - parseTransitionConfig: (config: string): TransitionConfig => { - try { - return JSON.parse(config); - } catch { - return {transitions: []}; - } - }, - parseFormDefinition: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {}; - } - }, - parseGraphDefinition: (config: string): Record => { - try { - return JSON.parse(config); - } catch { - return {}; - } - } -}; \ No newline at end of file diff --git a/frontend/src/types/base.ts b/frontend/src/types/base.ts index 2c62aea1..7b09fbb3 100644 --- a/frontend/src/types/base.ts +++ b/frontend/src/types/base.ts @@ -1,34 +1,50 @@ export interface BaseResponse { - id: number; - createTime: string; - updateTime: string; - createBy?: string; - updateBy?: string; - enabled: boolean; - version: number; + id: number; + createTime: string; + updateTime: string; + createBy?: string; + updateBy?: string; + enabled: boolean; + version: number; } export interface BaseQuery { - keyword?: string; - enabled?: boolean; - startTime?: string; - endTime?: string; -} - -export interface Page { - content: T[]; - totalElements: number; - totalPages: number; - size: number; - number: number; - empty: boolean; - first: boolean; - last: boolean; + pageNum?: number; + pageSize?: number; + sortField?: string; + sortOrder?: string; } export interface Response { - code: number; - message: string; - data: T; - success: boolean; -} \ No newline at end of file + code: number; + message: string; + data: T; + success: boolean; +} + +export interface BaseRequest { + enabled?: boolean; +} + + +// 分页响应数据 +export interface Page { + content: T[]; // 数据内容 + totalElements: number; // 总记录数 + totalPages: number; // 总页数 + size: number; // 每页大小 + number: number; // 当前页码(从0开始) + numberOfElements: number; // 当前页记录数 + first: boolean; // 是否第一页 + last: boolean; // 是否最后一页 + empty: boolean; // 是否为空 + pageable: { + pageNumber: number; + pageSize: number; + sort: { + empty: boolean; + sorted: boolean; + unsorted: boolean; + }; + }; +} \ No newline at end of file diff --git a/frontend/src/types/base/page.ts b/frontend/src/types/base/page.ts deleted file mode 100644 index a3b46f37..00000000 --- a/frontend/src/types/base/page.ts +++ /dev/null @@ -1,29 +0,0 @@ -// 分页请求参数 -export interface PageParams { - pageNum: number; // 页码(从1开始) - pageSize: number; // 每页大小 - sortField?: string; // 排序字段 - sortOrder?: string; // 排序方向 -} - -// 分页响应数据 -export interface Page { - content: T[]; // 数据内容 - totalElements: number; // 总记录数 - totalPages: number; // 总页数 - size: number; // 每页大小 - number: number; // 当前页码(从0开始) - numberOfElements: number; // 当前页记录数 - first: boolean; // 是否第一页 - last: boolean; // 是否最后一页 - empty: boolean; // 是否为空 - pageable: { - pageNumber: number; - pageSize: number; - sort: { - empty: boolean; - sorted: boolean; - unsorted: boolean; - }; - }; -} \ No newline at end of file diff --git a/frontend/src/types/base/query.ts b/frontend/src/types/base/query.ts deleted file mode 100644 index f60af2f3..00000000 --- a/frontend/src/types/base/query.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface BaseQuery { - pageNum?: number; - pageSize?: number; - sortField?: string; - sortOrder?: string; -} \ No newline at end of file diff --git a/frontend/src/types/base/request.ts b/frontend/src/types/base/request.ts deleted file mode 100644 index fe1a2c3d..00000000 --- a/frontend/src/types/base/request.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface BaseRequest { - enabled?: boolean; -} \ No newline at end of file diff --git a/frontend/src/types/base/response.ts b/frontend/src/types/base/response.ts deleted file mode 100644 index 74e6112c..00000000 --- a/frontend/src/types/base/response.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface BaseResponse { - id: number; - createTime: string; - updateTime: string; - createBy?: string; - updateBy?: string; - enabled: boolean; - version: number; -} \ No newline at end of file