@digitalsee-ai/rcs 1.1.9 → 2.0.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -38
- package/README.npm.md +37 -0
- package/dist/components/digitalsee/JsonRenderer/index.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Canvas/FastOperationButtons.d.ts +5 -2
- package/dist/components/digitalsee/workflow/Canvas/FullscreenLoading.d.ts +10 -2
- package/dist/components/digitalsee/workflow/Canvas/MiniMap.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Canvas/NodePlaceholder.d.ts +12 -0
- package/dist/components/digitalsee/workflow/Canvas/WorkflowCanvasHeader.d.ts +4 -8
- package/dist/components/digitalsee/workflow/Canvas/actionItemToNodeData.d.ts +1 -6
- package/dist/components/digitalsee/workflow/Canvas/constants.d.ts +6 -26
- package/dist/components/digitalsee/workflow/Canvas/hooks/{classicNodeAddConnection.d.ts → nodePackageAddConnection.d.ts} +3 -3
- package/dist/components/digitalsee/workflow/Canvas/hooks/useCanvasApi.d.ts +4 -2
- package/dist/components/digitalsee/workflow/Canvas/hooks/useDataLoading.d.ts +33 -4
- package/dist/components/digitalsee/workflow/Canvas/hooks/useNodeAddCallback.d.ts +2 -3
- package/dist/components/digitalsee/workflow/Canvas/hooks/useSaveFlowAfterNodeAdd.d.ts +4 -7
- package/dist/components/digitalsee/workflow/Canvas/hooks/useWorkflowCanvasState.d.ts +22 -4
- package/dist/components/digitalsee/workflow/Canvas/types.d.ts +19 -21
- package/dist/components/digitalsee/workflow/Edges/BaseEdge.d.ts +2 -0
- package/dist/components/digitalsee/workflow/Edges/EdgeFactory.d.ts +3 -8
- package/dist/components/digitalsee/workflow/Edges/edgeLayout.d.ts +73 -0
- package/dist/components/digitalsee/workflow/Handles/CustomHandle.d.ts +1 -0
- package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.d.ts +19 -0
- package/dist/components/digitalsee/workflow/Nodes/DeclaredNode.d.ts +33 -0
- package/dist/components/digitalsee/workflow/Nodes/DynamicNode.d.ts +24 -0
- package/dist/components/digitalsee/workflow/Nodes/NodeFactory.d.ts +42 -4
- package/dist/components/digitalsee/workflow/Nodes/SuperBaseNode.d.ts +2 -1
- package/dist/components/digitalsee/workflow/Nodes/classicPortLayout.d.ts +51 -0
- package/dist/components/digitalsee/workflow/Nodes/components/NodeStatusBadge.d.ts +11 -0
- package/dist/components/digitalsee/workflow/Nodes/{classicNodePackagePortLayout.d.ts → nodePackagePortLayout.d.ts} +4 -4
- package/dist/components/digitalsee/workflow/Nodes/nodeTypeRegistry.d.ts +131 -0
- package/dist/components/digitalsee/workflow/Nodes/useNodePackagePorts.d.ts +35 -0
- package/dist/components/digitalsee/workflow/NodesConfig/NodePackageConfig/fieldSchemaAdapter.d.ts +14 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/RichTagInput/help.d.ts +5 -1
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/index.d.ts +1 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.d.ts +2 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.helpers.d.ts +11 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/VariableModal/tree-help.d.ts +5 -12
- package/dist/components/digitalsee/workflow/NodesConfig/submitPayload.d.ts +10 -17
- package/dist/components/digitalsee/workflow/Panels/CanvasConfigDebugger.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryItem.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryTabs.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCard.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeItem.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/PanelHeader.d.ts +1 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useConnectableNodeSelector.d.ts +2 -5
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/types.d.ts +10 -4
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableDataSource.d.ts +6 -10
- package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/components/NodeListItem.d.ts +1 -1
- package/dist/components/digitalsee/workflow/api/dip.types.d.ts +30 -1
- package/dist/components/digitalsee/workflow/api/index.d.ts +3 -22
- package/dist/components/digitalsee/workflow/builtin/controls/ConfigSubflow/index.d.ts +2 -2
- package/dist/components/digitalsee/workflow/builtin/globalConfig/index.d.ts +5 -1
- package/dist/components/digitalsee/workflow/config/globalConfig.d.ts +1 -5
- package/dist/components/digitalsee/workflow/config/layerConfig.d.ts +14 -0
- package/dist/components/digitalsee/workflow/config/themeConfig.d.ts +19 -23
- package/dist/components/digitalsee/workflow/constants/nodePackageHandles.d.ts +10 -0
- package/dist/components/digitalsee/workflow/context/workflowTriggerContext.d.ts +22 -0
- package/dist/components/digitalsee/workflow/coverage/acceptanceManifest.d.ts +30 -0
- package/dist/components/digitalsee/workflow/coverage/runtimeCoverage.d.ts +34 -0
- package/dist/components/digitalsee/workflow/design-system/AiFlowNodeTestPanel.d.ts +24 -0
- package/dist/components/digitalsee/workflow/design-system/AiFlowVariableTree.d.ts +34 -0
- package/dist/components/digitalsee/workflow/design-system/index.d.ts +3 -0
- package/dist/components/digitalsee/workflow/design-system/tokens.d.ts +103 -0
- package/dist/components/digitalsee/workflow/enums/canvas.d.ts +0 -12
- package/dist/components/digitalsee/workflow/enums/edge.d.ts +4 -2
- package/dist/components/digitalsee/workflow/enums/node.d.ts +5 -6
- package/dist/components/digitalsee/workflow/enums/workflow.d.ts +1 -1
- package/dist/components/digitalsee/workflow/examples/global-config-example.d.ts +1 -1
- package/dist/components/digitalsee/workflow/hooks/state.hooks.d.ts +1 -7
- package/dist/components/digitalsee/workflow/hooks/use-flow-data-operation.d.ts +1 -1
- package/dist/components/digitalsee/workflow/hooks/useCanvasLayout.d.ts +1 -1
- package/dist/components/digitalsee/workflow/hooks/useCanvasMode.d.ts +8 -0
- package/dist/components/digitalsee/workflow/hooks/useHandleConnections.d.ts +9 -1
- package/dist/components/digitalsee/workflow/hooks/useVariables.d.ts +1 -0
- package/dist/components/digitalsee/workflow/hooks/useWorkflow.d.ts +1 -1
- package/dist/components/digitalsee/workflow/index.d.ts +18 -47
- package/dist/components/digitalsee/workflow/migration/umi.d.ts +1 -2
- package/dist/components/digitalsee/workflow/store/workflowSlice.d.ts +5 -2
- package/dist/components/digitalsee/workflow/types/Node.d.ts +2 -0
- package/dist/components/digitalsee/workflow/types/Workflow.d.ts +1 -1
- package/dist/components/digitalsee/workflow/types/engine.d.ts +21 -12
- package/dist/components/digitalsee/workflow/types/flowVersion.d.ts +0 -30
- package/dist/components/digitalsee/workflow/utils/connectionCheck.d.ts +30 -0
- package/dist/components/digitalsee/workflow/utils/layoutUtils.d.ts +2 -2
- package/dist/components/digitalsee/workflow/utils/mcpCanvas.d.ts +0 -40
- package/dist/components/digitalsee/workflow/utils/mode.d.ts +18 -0
- package/dist/components/digitalsee/workflow/utils/nodeAutoConnect.d.ts +24 -0
- package/dist/components/digitalsee/workflow/utils/nodeCommon.d.ts +5 -0
- package/dist/components/digitalsee/workflow/utils/nodeHandleLayout.d.ts +83 -0
- package/dist/components/digitalsee/workflow/utils/nodePackageConnection.d.ts +28 -0
- package/dist/components/digitalsee/workflow/utils/nodePackageGraphValidation.d.ts +29 -0
- package/dist/components/digitalsee/workflow/utils/nodePackageSchemaCache.d.ts +15 -0
- package/dist/components/digitalsee/workflow/utils/onNodeRemoveHook.d.ts +13 -0
- package/dist/components/digitalsee/workflow/utils/triggerNode.d.ts +13 -0
- package/dist/components/digitalsee/workflow/utils/workflowConnectionValidator.d.ts +1 -3
- package/dist/components/digitalsee/workflow/workflow.story-fixtures.d.ts +50 -0
- package/dist/index-CBoDAvhq.mjs +285 -0
- package/dist/{index-CqZ6Y0AC.mjs → index-zEq02rJh.mjs} +23586 -25735
- package/dist/locales/en-US/common.d.ts +29 -52
- package/dist/locales/en-US.d.ts +29 -52
- package/dist/locales/zh-CN/common.d.ts +29 -52
- package/dist/locales/zh-CN.d.ts +29 -52
- package/dist/locales/zh-TW/common.d.ts +29 -52
- package/dist/locales/zh-TW.d.ts +29 -52
- package/dist/rcs.css +1 -1
- package/dist/rcs.es.js +65 -62
- package/dist/rcs.umd.js +132 -72
- package/package.json +38 -23
- package/dist/components/digitalsee/workflow/Canvas/FlowVersionManager.d.ts +0 -17
- package/dist/components/digitalsee/workflow/Canvas/NextConfigModalWrapper.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvas.d.ts +0 -4
- package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvasHeader.d.ts +0 -17
- package/dist/components/digitalsee/workflow/Canvas/hooks/createNodeAddHandlerNext.d.ts +0 -38
- package/dist/components/digitalsee/workflow/NextNodesConfigModal/index.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Nodes/AISubNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/ActionNode.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Nodes/AgentNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/BrowserNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/BuiltinMCPNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/ConditionNode.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Nodes/CustomNode.d.ts +0 -15
- package/dist/components/digitalsee/workflow/Nodes/LoopNode.d.ts +0 -4
- package/dist/components/digitalsee/workflow/Nodes/MCPServerNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/MCPToolNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/NextNodeFactory.d.ts +0 -12
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextActionNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextBaseNode.d.ts +0 -16
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextConditionNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextLoopNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextSwitchNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextTriggerNode.d.ts +0 -9
- package/dist/components/digitalsee/workflow/Nodes/SelfLoopNode.d.ts +0 -4
- package/dist/components/digitalsee/workflow/Nodes/StartNode.d.ts +0 -1
- package/dist/components/digitalsee/workflow/Nodes/SwitchNode.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Nodes/TriggerNode.d.ts +0 -10
- package/dist/components/digitalsee/workflow/Nodes/components/NextNodeDescription.d.ts +0 -16
- package/dist/components/digitalsee/workflow/Nodes/components/NextNodeOperations.d.ts +0 -11
- package/dist/components/digitalsee/workflow/Nodes/useClassicNodePackagePorts.d.ts +0 -27
- package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CreateCredentialModal.d.ts +0 -13
- package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CredentialSelect.d.ts +0 -17
- package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/ModifyCredentialModal.d.ts +0 -17
- package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fieldSchemaAdapter.d.ts +0 -10
- package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/index.d.ts +0 -17
- package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeSettings.d.ts +0 -6
- package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeTest.d.ts +0 -6
- package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/index.d.ts +0 -6
- package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/variable-tree-next.d.ts +0 -49
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/EntryTypeSelector.d.ts +0 -8
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCardList.d.ts +0 -20
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeActionState.d.ts +0 -28
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeSelectorPresentation.d.ts +0 -25
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/queryParams.d.ts +0 -18
- package/dist/components/digitalsee/workflow/constants/nextHandles.d.ts +0 -1
- package/dist/components/digitalsee/workflow/utils/classicNodePackageConnection.d.ts +0 -28
- package/dist/components/digitalsee/workflow/utils/classicNodePackageGraphValidation.d.ts +0 -29
- package/dist/components/digitalsee/workflow/utils/nextNodeSchemaCache.d.ts +0 -14
- package/dist/components/digitalsee/workflow/utils/queuedNodeConfigOpen.d.ts +0 -12
- package/dist/index-BnE-Ea2s.mjs +0 -312
- package/dist/index-BnE-Ea2s.mjs.map +0 -1
- package/dist/index-CqZ6Y0AC.mjs.map +0 -1
- package/dist/rcs.es.js.map +0 -1
- package/dist/rcs.umd.js.map +0 -1
- /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/WorkflowNodeSchemaFieldProvider.d.ts +0 -0
- /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowCodeField.d.ts +0 -0
- /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowProxyField.d.ts +0 -0
- /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/proxyField.d.ts +0 -0
- /package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/{next-compatible.d.ts → nodePackage-compatible.d.ts} +0 -0
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
interface NextNodeTestProps {
|
|
2
|
-
nodeId: string;
|
|
3
|
-
beforeHook?: (isRunNodeTest?: boolean, ignore?: boolean, output?: string) => void;
|
|
4
|
-
}
|
|
5
|
-
declare const NextNodeTest: import('react').ForwardRefExoticComponent<NextNodeTestProps & import('react').RefAttributes<unknown>>;
|
|
6
|
-
export default NextNodeTest;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Edge, Node } from '@xyflow/react';
|
|
2
|
-
/** 变量树节点 */
|
|
3
|
-
export interface VariableTreeNode {
|
|
4
|
-
/** 唯一标识 */
|
|
5
|
-
key: string;
|
|
6
|
-
/** 显示文本 */
|
|
7
|
-
title: string;
|
|
8
|
-
/** 数据类型 */
|
|
9
|
-
type?: string;
|
|
10
|
-
/** 是否叶子节点(可选中插入) */
|
|
11
|
-
isLeaf: boolean;
|
|
12
|
-
/** 选中时生成的表达式 */
|
|
13
|
-
expression?: string;
|
|
14
|
-
/** 子节点 */
|
|
15
|
-
children?: VariableTreeNode[];
|
|
16
|
-
}
|
|
17
|
-
export interface AvailableSource {
|
|
18
|
-
node: Node;
|
|
19
|
-
outputMode: 'normal' | 'error';
|
|
20
|
-
}
|
|
21
|
-
/** 清除 Schema 缓存 */
|
|
22
|
-
export declare function clearSchemaCache(): void;
|
|
23
|
-
/** 获取当前节点的可确定上游节点(按拓扑路径顺序) */
|
|
24
|
-
export declare function getUpstreamNodes(currentNodeId: string, nodes: Node[], edges: Edge[]): Node[];
|
|
25
|
-
export declare function getUpstreamSources(currentNodeId: string, nodes: Node[], edges: Edge[]): AvailableSource[];
|
|
26
|
-
/**
|
|
27
|
-
* 将 Next 变量树节点转换为后端可解析的旧版变量表达式。
|
|
28
|
-
*
|
|
29
|
-
* 处理逻辑:
|
|
30
|
-
* - 节点 ID:先做首尾空白裁剪,再转换为旧版变量 token。
|
|
31
|
-
* - 旧版变量 token:固定使用 `N` 作为节点 ID 前缀;如果传入值已经以 `N`
|
|
32
|
-
* 开头,认为它已经是旧版 token,不重复补前缀。
|
|
33
|
-
* - 字段路径为空:返回 `{{N节点ID}}`,用于极端兜底场景。
|
|
34
|
-
* - 字段路径非空:返回 `{{N节点ID.字段路径}}`。
|
|
35
|
-
*
|
|
36
|
-
* @param nodeId React Flow 节点 ID。
|
|
37
|
-
* @param fieldPath 输出字段路径。
|
|
38
|
-
* @returns 旧版变量表达式。
|
|
39
|
-
*/
|
|
40
|
-
export declare function formatClassicVariableExpression(nodeId: string, fieldPath: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* 构建当前节点可引用的变量树
|
|
43
|
-
*
|
|
44
|
-
* @param currentNodeId 当前正在配置的节点 ID
|
|
45
|
-
* @param nodes 画布中所有节点
|
|
46
|
-
* @param edges 画布中所有连线
|
|
47
|
-
* @returns 变量树根节点列表(每个上游节点一棵子树)
|
|
48
|
-
*/
|
|
49
|
-
export declare function buildVariableTree(currentNodeId: string, nodes: Node[], edges: Edge[]): Promise<VariableTreeNode[]>;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
|
-
export type EntryMode = 'automation' | 'mcp' | null;
|
|
3
|
-
interface EntryTypeSelectorProps {
|
|
4
|
-
onSelect: (mode: Exclude<EntryMode, null>) => void;
|
|
5
|
-
}
|
|
6
|
-
/** @description 首节点入口类型选择。 */
|
|
7
|
-
declare const EntryTypeSelector: React.FC<EntryTypeSelectorProps>;
|
|
8
|
-
export default EntryTypeSelector;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { NodeActionMeta } from '../hooks/useNodeActionState';
|
|
2
|
-
import { ActionItem, NodeTypeItem } from '../types';
|
|
3
|
-
import { default as React } from 'react';
|
|
4
|
-
interface NodeCardListProps {
|
|
5
|
-
isSearching: boolean;
|
|
6
|
-
visibleNodes: NodeTypeItem[];
|
|
7
|
-
useConnectableDataSource: boolean;
|
|
8
|
-
expandedNodeIds: string[];
|
|
9
|
-
nodeActionsMap: Record<string, NodeActionMeta>;
|
|
10
|
-
searchText: string;
|
|
11
|
-
isInitialLoading: boolean;
|
|
12
|
-
isLoadingNodes: boolean;
|
|
13
|
-
hasMore: boolean;
|
|
14
|
-
onNodeToggle: (node: NodeTypeItem) => void;
|
|
15
|
-
onActionSelect: (node: NodeTypeItem, action: ActionItem) => void;
|
|
16
|
-
onLoadAllActions: (node: NodeTypeItem) => void;
|
|
17
|
-
}
|
|
18
|
-
/** @description 节点卡片集合及其加载、空态和分页尾部。 */
|
|
19
|
-
declare const NodeCardList: React.FC<NodeCardListProps>;
|
|
20
|
-
export default NodeCardList;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ActionItem, NodeTypeItem } from '../types';
|
|
2
|
-
export interface NodeActionMeta {
|
|
3
|
-
actions: ActionItem[];
|
|
4
|
-
loading: boolean;
|
|
5
|
-
source?: 'search-partial' | 'full';
|
|
6
|
-
}
|
|
7
|
-
interface UseNodeActionStateProps {
|
|
8
|
-
actionRequestContextKey: string;
|
|
9
|
-
contextMode?: string;
|
|
10
|
-
fetchNodeActions: (node: NodeTypeItem, options?: {
|
|
11
|
-
suppressLoading?: boolean;
|
|
12
|
-
}) => Promise<ActionItem[]>;
|
|
13
|
-
isMcpServerEntryMode: boolean;
|
|
14
|
-
visibleNodes: NodeTypeItem[];
|
|
15
|
-
searchText: string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* @description 管理连接器的展开状态、动作缓存,以及异步动作请求的竞态保护。
|
|
19
|
-
*/
|
|
20
|
-
export declare function useNodeActionState({ actionRequestContextKey, contextMode, fetchNodeActions, isMcpServerEntryMode, visibleNodes, searchText, }: UseNodeActionStateProps): {
|
|
21
|
-
expandedNodeIds: string[];
|
|
22
|
-
nodeActionsMap: Record<string, NodeActionMeta>;
|
|
23
|
-
handleNodeToggle: (node: NodeTypeItem) => Promise<void>;
|
|
24
|
-
handleLoadAllActions: (node: NodeTypeItem) => Promise<void>;
|
|
25
|
-
resetNodeActionState: () => void;
|
|
26
|
-
setExpandedNodeIds: import('react').Dispatch<import('react').SetStateAction<string[]>>;
|
|
27
|
-
};
|
|
28
|
-
export {};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { CategoryItem, LinkSearchParams, NodeTypeItem } from '../types';
|
|
2
|
-
import { NodeAddInfo } from '../../../types/NodeAddContext';
|
|
3
|
-
interface UseNodeSelectorPresentationProps {
|
|
4
|
-
effectiveNodeAddInfo?: NodeAddInfo | null;
|
|
5
|
-
isEntryTypeSelection: boolean;
|
|
6
|
-
activeCategoryId?: string;
|
|
7
|
-
currentCategory: CategoryItem | null;
|
|
8
|
-
categoryNodes: NodeTypeItem[];
|
|
9
|
-
searchResults: NodeTypeItem[];
|
|
10
|
-
searchText: string;
|
|
11
|
-
isRealTriggerMode: boolean;
|
|
12
|
-
workflowId?: string;
|
|
13
|
-
useConnectableDataSource?: boolean;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* @description 汇总节点选择器的协议展示状态和列表/搜索派生参数。
|
|
17
|
-
*/
|
|
18
|
-
export declare function useNodeSelectorPresentation({ effectiveNodeAddInfo, isEntryTypeSelection, activeCategoryId, currentCategory, categoryNodes, searchResults, searchText, isRealTriggerMode, workflowId, useConnectableDataSource, }: UseNodeSelectorPresentationProps): {
|
|
19
|
-
panelTitle: string;
|
|
20
|
-
searchPlaceholder: string;
|
|
21
|
-
visibleNodes: NodeTypeItem[];
|
|
22
|
-
buildSearchParams: () => LinkSearchParams;
|
|
23
|
-
isMcpServerEntryMode: boolean;
|
|
24
|
-
};
|
|
25
|
-
export {};
|
package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/queryParams.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NodeProtocol } from '../../../types/NodeProtocol';
|
|
2
|
-
interface CanvasContextNode {
|
|
3
|
-
data?: {
|
|
4
|
-
__isMcpServerCanvas?: unknown;
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
interface ResolveNodeSelectorProtocolParams {
|
|
8
|
-
protocol?: string;
|
|
9
|
-
sourceNode?: CanvasContextNode | null;
|
|
10
|
-
targetNode?: CanvasContextNode | null;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Resolve the protocol used by node-catalog requests without changing the
|
|
14
|
-
* selector's entry mode. MCP execution-node selectors have no entry protocol,
|
|
15
|
-
* so they fall back to the canvas marker carried by their source/target node.
|
|
16
|
-
*/
|
|
17
|
-
export declare const resolveNodeSelectorProtocol: ({ protocol, sourceNode, targetNode, }: ResolveNodeSelectorProtocolParams) => NodeProtocol.AI_LANGUAGE_MODEL | NodeProtocol.AI_MEMORY | NodeProtocol.MCP | NodeProtocol.MCP_SERVER;
|
|
18
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const NEXT_ERROR_HANDLE_ID = "error";
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { DipNodeSchema } from '../api/dip';
|
|
2
|
-
import { PortConnectionEdge, PortConnectionValidationCode } from './portConnectionValidator';
|
|
3
|
-
import { Node } from '@xyflow/react';
|
|
4
|
-
export type ClassicNodePackageConnectionCode = PortConnectionValidationCode | 'NOT_APPLICABLE' | 'SCHEMA_NOT_READY';
|
|
5
|
-
export interface ClassicNodePackageConnectionResult {
|
|
6
|
-
applicable: boolean;
|
|
7
|
-
valid: boolean;
|
|
8
|
-
code: ClassicNodePackageConnectionCode;
|
|
9
|
-
reason: string;
|
|
10
|
-
missingSchemaNodeIds?: string[];
|
|
11
|
-
}
|
|
12
|
-
export interface ValidateClassicNodePackageConnectionInput {
|
|
13
|
-
sourceNode?: Node | null;
|
|
14
|
-
targetNode?: Node | null;
|
|
15
|
-
sourceHandle?: string | null;
|
|
16
|
-
targetHandle?: string | null;
|
|
17
|
-
edges?: readonly PortConnectionEdge[];
|
|
18
|
-
}
|
|
19
|
-
/** 同步解析节点内联或已预加载的 CLASSIC nodepackage Schema。 */
|
|
20
|
-
export declare function resolveClassicNodePackageSchema(node?: Node | null): DipNodeSchema | null;
|
|
21
|
-
export declare function isClassicNodePackageNode(node?: Node | null): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* 校验两个 CLASSIC nodepackage 节点之间的端口连接。
|
|
24
|
-
*
|
|
25
|
-
* 混合 legacy/nodepackage 连接保留前端当前精确 handle 名称,并按后端虚拟端口契约
|
|
26
|
-
* 将 legacy 端口能力类型统一映射为 main。
|
|
27
|
-
*/
|
|
28
|
-
export declare function validateClassicNodePackageConnection({ sourceNode, targetNode, sourceHandle, targetHandle, edges, }: ValidateClassicNodePackageConnectionInput): ClassicNodePackageConnectionResult;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { PortConnectionValidationCode } from './portConnectionValidator';
|
|
2
|
-
import { Edge, Node } from '@xyflow/react';
|
|
3
|
-
export type ClassicNodePackageGraphIssueCode = PortConnectionValidationCode | 'REQUIRED_INPUT_MISSING' | 'SCHEMA_NOT_READY';
|
|
4
|
-
export interface ClassicNodePackageGraphIssue {
|
|
5
|
-
code: ClassicNodePackageGraphIssueCode;
|
|
6
|
-
reason: string;
|
|
7
|
-
blocking: boolean;
|
|
8
|
-
nodeId?: string;
|
|
9
|
-
portName?: string;
|
|
10
|
-
edgeId?: string;
|
|
11
|
-
sourceNodeId?: string;
|
|
12
|
-
targetNodeId?: string;
|
|
13
|
-
}
|
|
14
|
-
export interface ClassicNodePackageGraphValidationResult {
|
|
15
|
-
valid: boolean;
|
|
16
|
-
issues: ClassicNodePackageGraphIssue[];
|
|
17
|
-
blockingIssues: ClassicNodePackageGraphIssue[];
|
|
18
|
-
missingSchemaNodeIds: string[];
|
|
19
|
-
}
|
|
20
|
-
interface ValidateClassicNodePackageGraphInput {
|
|
21
|
-
nodes: readonly Node[];
|
|
22
|
-
edges: readonly Edge[];
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 保存前检查当前已知的 CLASSIC nodepackage 端口约束。
|
|
26
|
-
* Schema 尚未加载属于非阻塞 warning,最终交给 ACM 后端兜底;已知非法端口则阻止保存。
|
|
27
|
-
*/
|
|
28
|
-
export declare function validateClassicNodePackageGraph({ nodes, edges, }: ValidateClassicNodePackageGraphInput): ClassicNodePackageGraphValidationResult;
|
|
29
|
-
export {};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { DipNodeSchema } from '../api/dip';
|
|
2
|
-
export declare function clearNextNodeSchemaCache(): void;
|
|
3
|
-
export declare function setCachedNextNodeSchema(nodeKey: string, nodeVersion: number | undefined, schema: DipNodeSchema): void;
|
|
4
|
-
export declare function setCachedClassicNextNodeSchema(nodeKey: string, nodeVersion: number | undefined, schema: DipNodeSchema): void;
|
|
5
|
-
/**
|
|
6
|
-
* 同步读取已预加载的 CLASSIC nodepackage Schema,不触发网络请求。
|
|
7
|
-
*
|
|
8
|
-
* 手动拖线发生在 ReactFlow 的同步校验阶段,无法等待异步 Schema 请求;
|
|
9
|
-
* 因此画布加载/选择器转换阶段会先预热缓存,再由这里读取。缺失版本时与
|
|
10
|
-
* `getCachedClassicNextNodeSchema` 保持一致,按 ACM 版本 1 兜底。
|
|
11
|
-
*/
|
|
12
|
-
export declare function peekCachedClassicNextNodeSchema(nodeKey: string, nodeVersion?: number): DipNodeSchema | null;
|
|
13
|
-
export declare function getCachedClassicNextNodeSchema(nodeKey: string, nodeVersion?: number): Promise<DipNodeSchema | null>;
|
|
14
|
-
export declare function getCachedNextNodeSchema(nodeKey: string, nodeVersion?: number): Promise<DipNodeSchema | null>;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 新增节点后「保存完成再打开配置弹窗」的排队状态。
|
|
3
|
-
*
|
|
4
|
-
* 历史实现挂在 window 上,保存成功时由 updateSaveStatus 消费。
|
|
5
|
-
* 若用户在保存完成前关闭弹窗,必须取消排队,否则会偶现再次自动打开。
|
|
6
|
-
*/
|
|
7
|
-
/** 排队:保存成功后打开指定节点配置 */
|
|
8
|
-
export declare function queueNodeConfigOpen(nodeId: string | null | undefined): void;
|
|
9
|
-
/** 取消排队(用户关闭配置弹窗时调用) */
|
|
10
|
-
export declare function cancelQueuedNodeConfigOpen(): void;
|
|
11
|
-
/** 消费排队并清空,返回待打开的节点 ID(无则空串) */
|
|
12
|
-
export declare function consumeQueuedNodeConfigOpen(): string;
|
package/dist/index-BnE-Ea2s.mjs
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
import { jsx as n, jsxs as C } from "react/jsx-runtime";
|
|
2
|
-
import { D as F, V as R, e as V, i as T, t as l, f as P, d as L } from "./index-CqZ6Y0AC.mjs";
|
|
3
|
-
import { useEventEmitter as O, useReactive as B, useSize as W } from "ahooks";
|
|
4
|
-
import { FormattedMessage as $ } from "react-intl";
|
|
5
|
-
import { CloseCircleFilled as z, CheckCircleFilled as A } from "@ant-design/icons";
|
|
6
|
-
import { Button as D } from "antd";
|
|
7
|
-
import * as H from "monaco-editor";
|
|
8
|
-
import { useRef as I, useEffect as K } from "react";
|
|
9
|
-
import { createPortal as q } from "react-dom";
|
|
10
|
-
import U from "react-monaco-editor";
|
|
11
|
-
const G = "_modalContainer_6vx6e_1", J = "_editorContainer_6vx6e_10", Q = "_sider_6vx6e_20", X = "_main_6vx6e_23", Y = "_header_6vx6e_28", Z = "_editor_6vx6e_10", v = {
|
|
12
|
-
modalContainer: G,
|
|
13
|
-
editorContainer: J,
|
|
14
|
-
sider: Q,
|
|
15
|
-
main: X,
|
|
16
|
-
header: Y,
|
|
17
|
-
editor: Z
|
|
18
|
-
}, ee = "_ideWrapper_sfar6_1", ne = {
|
|
19
|
-
ideWrapper: ee
|
|
20
|
-
}, te = (e) => {
|
|
21
|
-
const { nodeId: r, onInsert: i, open: d } = e, o = O();
|
|
22
|
-
return o.useSubscription((s) => {
|
|
23
|
-
s.type === "insert" && i(s.expression);
|
|
24
|
-
}), /* @__PURE__ */ n(F.Provider, { value: { event$: o }, children: /* @__PURE__ */ n("div", { className: ne.ideWrapper, children: /* @__PURE__ */ n(R, { nodeId: r, onInsert: i, open: d }) }) });
|
|
25
|
-
}, ie = "_siderContainer_fhkbn_1", re = {
|
|
26
|
-
siderContainer: ie
|
|
27
|
-
};
|
|
28
|
-
function oe(e) {
|
|
29
|
-
return /* @__PURE__ */ C("div", { className: re.siderContainer, children: [
|
|
30
|
-
/* @__PURE__ */ n("div", { children: /* @__PURE__ */ n(te, { open: e.open, nodeId: e.nodeId, onInsert: e.onInsert }) }),
|
|
31
|
-
/* @__PURE__ */ n("div", { style: { textAlign: "center" } })
|
|
32
|
-
] });
|
|
33
|
-
}
|
|
34
|
-
function se({ language: e = "javascript" }) {
|
|
35
|
-
return /* @__PURE__ */ C("h3", { style: { color: "#999", fontSize: 16, margin: "6px 0" }, children: [
|
|
36
|
-
/* @__PURE__ */ n($, { id: "link.flow.code_editor" }),
|
|
37
|
-
" (",
|
|
38
|
-
e.toUpperCase(),
|
|
39
|
-
")"
|
|
40
|
-
] });
|
|
41
|
-
}
|
|
42
|
-
function ae(e) {
|
|
43
|
-
return /* @__PURE__ */ C(
|
|
44
|
-
"div",
|
|
45
|
-
{
|
|
46
|
-
style: {
|
|
47
|
-
color: "white",
|
|
48
|
-
display: "flex",
|
|
49
|
-
paddingRight: 30,
|
|
50
|
-
alignItems: "center",
|
|
51
|
-
height: "100%",
|
|
52
|
-
fontSize: 16
|
|
53
|
-
},
|
|
54
|
-
children: [
|
|
55
|
-
/* @__PURE__ */ n(
|
|
56
|
-
D,
|
|
57
|
-
{
|
|
58
|
-
type: "primary",
|
|
59
|
-
size: "small",
|
|
60
|
-
style: { marginRight: 10 },
|
|
61
|
-
disabled: !1,
|
|
62
|
-
danger: !0,
|
|
63
|
-
onClick: e.onCancel,
|
|
64
|
-
icon: /* @__PURE__ */ n(z, { onClick: e.onCancel }),
|
|
65
|
-
children: /* @__PURE__ */ n($, { id: "app.common.word.cancel" })
|
|
66
|
-
}
|
|
67
|
-
),
|
|
68
|
-
/* @__PURE__ */ n(
|
|
69
|
-
D,
|
|
70
|
-
{
|
|
71
|
-
type: "primary",
|
|
72
|
-
size: "small",
|
|
73
|
-
style: { marginRight: 10 },
|
|
74
|
-
onClick: e.onFinish,
|
|
75
|
-
icon: /* @__PURE__ */ n(A, {}),
|
|
76
|
-
children: /* @__PURE__ */ n($, { id: "app.common.word.finish" })
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
]
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
const le = [{ trigger: "log", content: "console.log('$1');$2", desc: "输出日志" }, { trigger: "imp", content: "import $1 from '$2';$3" }, { trigger: "loop", content: `for (let $1=0; i< $2.length;i++) {
|
|
84
|
-
|
|
85
|
-
}`, desc: "循环操作" }], ce = {
|
|
86
|
-
snippets: le
|
|
87
|
-
}, de = {
|
|
88
|
-
selectOnLineNumbers: !0,
|
|
89
|
-
automaticLayout: !0,
|
|
90
|
-
padding: {
|
|
91
|
-
top: 10
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
function ue(e) {
|
|
95
|
-
if (e.type === "global")
|
|
96
|
-
return [
|
|
97
|
-
`**${l("link.flow.variable_type_global")}**`,
|
|
98
|
-
`${l("link.flow.variable_path")}:\`${e.value}\``,
|
|
99
|
-
`${l("link.flow.variable_name")}:\`${e.path}\``
|
|
100
|
-
].filter(Boolean).join(`
|
|
101
|
-
|
|
102
|
-
`);
|
|
103
|
-
if (e.type === "builtin") {
|
|
104
|
-
const r = P.getBuiltinVariableTips(e.firstPart);
|
|
105
|
-
return [
|
|
106
|
-
`**${l("link.flow.variable_type_builtin")}**`,
|
|
107
|
-
`${l("link.flow.variable_path")}:\`${e.value}\``,
|
|
108
|
-
r
|
|
109
|
-
].filter(Boolean).join(`
|
|
110
|
-
|
|
111
|
-
`);
|
|
112
|
-
}
|
|
113
|
-
return e.type === "node" ? [
|
|
114
|
-
`**${l("link.flow.variable_type_node")}**`,
|
|
115
|
-
`${l("link.flow.variable_path")}:\`${e.value}\``,
|
|
116
|
-
e.path ? `${l("link.flow.variable_field")}:\`${e.path}\`` : ""
|
|
117
|
-
].filter(Boolean).join(`
|
|
118
|
-
|
|
119
|
-
`) : [
|
|
120
|
-
`**${l("link.flow.variable_type_platform")}**`,
|
|
121
|
-
`${l("link.flow.variable_path")}:\`${e.value}\``
|
|
122
|
-
].join(`
|
|
123
|
-
|
|
124
|
-
`);
|
|
125
|
-
}
|
|
126
|
-
const ge = (e) => ({
|
|
127
|
-
code: e.code,
|
|
128
|
-
severity: e.severity,
|
|
129
|
-
message: e.message,
|
|
130
|
-
source: e.source,
|
|
131
|
-
startLineNumber: e.startLineNumber,
|
|
132
|
-
startColumn: e.startColumn,
|
|
133
|
-
endLineNumber: e.endLineNumber,
|
|
134
|
-
endColumn: e.endColumn,
|
|
135
|
-
modelVersionId: e.modelVersionId,
|
|
136
|
-
relatedInformation: e.relatedInformation,
|
|
137
|
-
tags: e.tags
|
|
138
|
-
});
|
|
139
|
-
function k(e, r) {
|
|
140
|
-
const i = V(r.getValue());
|
|
141
|
-
if (!i.length)
|
|
142
|
-
return;
|
|
143
|
-
const d = e.editor.getModelMarkers({ resource: r.uri }), o = /* @__PURE__ */ new Map();
|
|
144
|
-
d.forEach((s) => {
|
|
145
|
-
const c = o.get(s.owner) ?? [];
|
|
146
|
-
c.push(s), o.set(s.owner, c);
|
|
147
|
-
}), o.forEach((s, c) => {
|
|
148
|
-
const u = s.filter(
|
|
149
|
-
(g) => !i.some((b) => L(b, g))
|
|
150
|
-
);
|
|
151
|
-
u.length !== s.length && e.editor.setModelMarkers(r, c, u.map(ge));
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
function pe(e, r) {
|
|
155
|
-
const i = [].map((d) => ({
|
|
156
|
-
insertText: d,
|
|
157
|
-
kind: e.languages.CompletionItemKind.Function,
|
|
158
|
-
// 对应提示图标的不同
|
|
159
|
-
label: d
|
|
160
|
-
}));
|
|
161
|
-
return e.languages.registerCompletionItemProvider(r, {
|
|
162
|
-
provideCompletionItems() {
|
|
163
|
-
return {
|
|
164
|
-
suggestions: i
|
|
165
|
-
};
|
|
166
|
-
},
|
|
167
|
-
quickSuggestions: !0,
|
|
168
|
-
// 默认提示关闭
|
|
169
|
-
triggerCharacters: ["{", ".", "=", ":"]
|
|
170
|
-
// 触发提示的字符 可以定义多个
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
function fe(e) {
|
|
174
|
-
return e.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
|
|
175
|
-
noSemanticValidation: !0,
|
|
176
|
-
noSyntaxValidation: !1
|
|
177
|
-
}), e.languages.typescript.javascriptDefaults.setCompilerOptions({
|
|
178
|
-
target: e.languages.typescript.ScriptTarget.ES2015,
|
|
179
|
-
allowNonTsExtensions: !0
|
|
180
|
-
}), e.languages.registerCompletionItemProvider("javascript", {
|
|
181
|
-
provideCompletionItems: () => ({
|
|
182
|
-
suggestions: ce.snippets.map((i) => ({
|
|
183
|
-
label: i.trigger,
|
|
184
|
-
kind: e.languages.CompletionItemKind.Method,
|
|
185
|
-
detail: i.desc ?? "",
|
|
186
|
-
insertText: i.content,
|
|
187
|
-
insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet
|
|
188
|
-
}))
|
|
189
|
-
})
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
function $e(e) {
|
|
193
|
-
const { open: r, nodeId: i, initialValue: d, language: o = "javascript", showVariableSidebar: s = !0 } = e, c = I(null), u = I([]), g = B({
|
|
194
|
-
code: "",
|
|
195
|
-
range: new H.Range(1, 1, 1, 1)
|
|
196
|
-
}), b = (t, a) => {
|
|
197
|
-
t.onDidChangeCursorPosition((p) => {
|
|
198
|
-
const m = p.position, { lineNumber: f = 0, column: _ = 0 } = m;
|
|
199
|
-
g.range = new a.Range(f, _, f, _);
|
|
200
|
-
}), c.current = t, t.focus(), g.code = t.getValue();
|
|
201
|
-
const j = a.languages.registerHoverProvider(o, {
|
|
202
|
-
provideHover: (p, m) => new Promise((f) => {
|
|
203
|
-
const h = V(p.getValue()).find(
|
|
204
|
-
(E) => T(E, m.lineNumber, m.column)
|
|
205
|
-
);
|
|
206
|
-
if (!h) {
|
|
207
|
-
f(null);
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
f({
|
|
211
|
-
range: new a.Range(
|
|
212
|
-
h.startLine,
|
|
213
|
-
h.startColumn,
|
|
214
|
-
h.endLine,
|
|
215
|
-
h.endColumn
|
|
216
|
-
),
|
|
217
|
-
contents: [{ value: ue(h) }]
|
|
218
|
-
});
|
|
219
|
-
})
|
|
220
|
-
}), y = t.getModel();
|
|
221
|
-
if (y) {
|
|
222
|
-
let p = !1;
|
|
223
|
-
const m = a.editor.onDidChangeMarkers((f) => {
|
|
224
|
-
p || !f.some((_) => _.toString() === y.uri.toString()) || (p = !0, window.setTimeout(() => {
|
|
225
|
-
try {
|
|
226
|
-
k(a, y);
|
|
227
|
-
} finally {
|
|
228
|
-
p = !1;
|
|
229
|
-
}
|
|
230
|
-
}, 0));
|
|
231
|
-
});
|
|
232
|
-
k(a, y), t.onDidDispose(() => m.dispose());
|
|
233
|
-
}
|
|
234
|
-
t.onDidDispose(() => j.dispose());
|
|
235
|
-
}, N = (t) => {
|
|
236
|
-
u.current.forEach((a) => {
|
|
237
|
-
a.dispose();
|
|
238
|
-
}), u.current = [pe(t, o)], o === "javascript" && u.current.push(fe(t));
|
|
239
|
-
};
|
|
240
|
-
K(
|
|
241
|
-
() => () => {
|
|
242
|
-
u.current.forEach((t) => {
|
|
243
|
-
t.dispose();
|
|
244
|
-
}), u.current = [];
|
|
245
|
-
},
|
|
246
|
-
[]
|
|
247
|
-
);
|
|
248
|
-
const S = (t) => {
|
|
249
|
-
const a = [
|
|
250
|
-
{
|
|
251
|
-
range: g.range,
|
|
252
|
-
text: t,
|
|
253
|
-
forceMoveMarkers: !0
|
|
254
|
-
}
|
|
255
|
-
];
|
|
256
|
-
c.current && g.range && c.current.executeEdits("my-source", a);
|
|
257
|
-
}, x = () => {
|
|
258
|
-
var t;
|
|
259
|
-
(t = e.onFinish) == null || t.call(e, g.code);
|
|
260
|
-
}, M = I(null), w = W(M);
|
|
261
|
-
return q(
|
|
262
|
-
/* @__PURE__ */ n(
|
|
263
|
-
"div",
|
|
264
|
-
{
|
|
265
|
-
className: v.modalContainer,
|
|
266
|
-
ref: M,
|
|
267
|
-
style: { display: r ? "flex" : "none" },
|
|
268
|
-
children: /* @__PURE__ */ C("div", { className: v.editorContainer, id: "javascript-code-editor", children: [
|
|
269
|
-
s ? /* @__PURE__ */ n("div", { className: v.sider, children: /* @__PURE__ */ n(
|
|
270
|
-
oe,
|
|
271
|
-
{
|
|
272
|
-
onCancel: e.onCancel,
|
|
273
|
-
onFinish: x,
|
|
274
|
-
editor: c.current,
|
|
275
|
-
nodeId: i,
|
|
276
|
-
open: r,
|
|
277
|
-
onInsert: S
|
|
278
|
-
}
|
|
279
|
-
) }) : null,
|
|
280
|
-
/* @__PURE__ */ C("div", { className: v.main, children: [
|
|
281
|
-
/* @__PURE__ */ C("div", { className: v.header, children: [
|
|
282
|
-
/* @__PURE__ */ n(se, { language: o }),
|
|
283
|
-
/* @__PURE__ */ n(ae, { onCancel: e.onCancel, onFinish: x })
|
|
284
|
-
] }),
|
|
285
|
-
/* @__PURE__ */ n("div", { className: v.editor, children: /* @__PURE__ */ n(
|
|
286
|
-
U,
|
|
287
|
-
{
|
|
288
|
-
width: "100%",
|
|
289
|
-
height: ((w == null ? void 0 : w.height) ?? 0) - 40,
|
|
290
|
-
language: o,
|
|
291
|
-
theme: "vs-dark",
|
|
292
|
-
value: d,
|
|
293
|
-
options: de,
|
|
294
|
-
onChange: (t) => {
|
|
295
|
-
g.code = t;
|
|
296
|
-
},
|
|
297
|
-
editorWillMount: N,
|
|
298
|
-
editorDidMount: b
|
|
299
|
-
},
|
|
300
|
-
i
|
|
301
|
-
) })
|
|
302
|
-
] })
|
|
303
|
-
] })
|
|
304
|
-
}
|
|
305
|
-
),
|
|
306
|
-
document.body
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
export {
|
|
310
|
-
$e as default
|
|
311
|
-
};
|
|
312
|
-
//# sourceMappingURL=index-BnE-Ea2s.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BnE-Ea2s.mjs","sources":["../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/IDEVariableModal/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/sider/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/title/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/toolbar/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/index.tsx"],"sourcesContent":["import styles from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal/variableModal.module.less';\nimport { VariableModal } from '@workflow/NodesConfig/components/VariableModal';\nimport { DrawerContext } from '@workflow/NodesConfig/context';\nimport { useEventEmitter } from 'ahooks';\n\ntype VariableModalProps = {\n nodeId: string;\n onInsert: (values: any) => void;\n open: boolean;\n};\n\nexport const IDEVariableModal: React.FC<VariableModalProps> = (props) => {\n const { nodeId, onInsert, open } = props;\n const event$ = useEventEmitter<any>();\n\n event$.useSubscription((value: any) => {\n if (value.type === 'insert') {\n onInsert(value.expression);\n }\n });\n\n return (\n <DrawerContext.Provider value={{ event$ }}>\n <div className={styles.ideWrapper}>\n <VariableModal nodeId={nodeId} onInsert={onInsert} open={open} />\n </div>\n </DrawerContext.Provider>\n );\n};\n","import { IDEVariableModal } from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal';\nimport styles from '@workflow/NodesConfig/components/online-ide/components/sider/sider.module.less';\n\ninterface ISiderProps {\n onFinish: () => void;\n onCancel: () => void;\n editor: any;\n open: boolean;\n onInsert: (values) => void;\n nodeId: string;\n}\nexport function Sider(props: ISiderProps) {\n return (\n <div className={styles.siderContainer}>\n <div>\n <IDEVariableModal open={props.open} nodeId={props.nodeId} onInsert={props.onInsert} />\n </div>\n <div style={{ textAlign: 'center' }}></div>\n </div>\n );\n}\n","import { FormattedMessage } from '@workflow/migration/umi';\n\ninterface TitleControlProps {\n language?: string;\n}\n\nexport function TitleControl({ language = 'javascript' }: TitleControlProps) {\n return (\n <h3 style={{ color: '#999', fontSize: 16, margin: '6px 0' }}>\n <FormattedMessage id=\"link.flow.code_editor\" /> ({language.toUpperCase()})\n </h3>\n );\n}\n","import { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport { FormattedMessage } from '@workflow/migration/umi';\n\ninterface IToolBarProps {\n onFinish: () => void;\n onCancel: () => void;\n}\nexport function ToolBar(props: IToolBarProps) {\n return (\n <div\n style={{\n color: 'white',\n display: 'flex',\n paddingRight: 30,\n alignItems: 'center',\n height: '100%',\n fontSize: 16,\n }}\n >\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n disabled={false}\n danger\n onClick={props.onCancel}\n icon={<CloseCircleFilled onClick={props.onCancel} />}\n >\n <FormattedMessage id=\"app.common.word.cancel\" />\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n onClick={props.onFinish}\n icon={<CheckCircleFilled />}\n >\n <FormattedMessage id=\"app.common.word.finish\" />\n </Button>\n </div>\n );\n}\n","// cspell:ignore jssnippets\nimport styles from '@workflow/NodesConfig/components/online-ide/onlineIDE.module.less';\nimport '@workflow/NodesConfig/components/online-ide/ide.token.less';\nimport { Sider } from '@workflow/NodesConfig/components/online-ide/components/sider';\nimport { TitleControl } from '@workflow/NodesConfig/components/online-ide/components/title';\nimport { ToolBar } from '@workflow/NodesConfig/components/online-ide/components/toolbar';\nimport type { FlowVariableMatch } from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport {\n doesRangeIntersectFlowVariable,\n extractFlowVariables,\n isPositionInFlowVariable,\n} from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport jsSnippets from '@workflow/NodesConfig/components/online-ide/helper/jssnippets.json';\nimport { t } from '@workflow/utils/common';\nimport { flowDesignerDAO } from '@workflow/utils/glob';\nimport { useReactive, useSize } from 'ahooks';\nimport * as monaco from 'monaco-editor';\nimport { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { EditorDidMount } from 'react-monaco-editor';\nimport MonacoEditor from 'react-monaco-editor';\n\ntype Writable<T> = {\n -readonly [K in keyof T]: T[K];\n};\ntype Options = Parameters<typeof MonacoEditor>['0']['options'];\n\ntype EditorInstance = Writable<Parameters<EditorDidMount>['0']>;\ntype MonacoInstance = Parameters<EditorDidMount>['1'];\n\nconst OPTIONS: Options = {\n selectOnLineNumbers: true,\n automaticLayout: true,\n padding: {\n top: 10,\n },\n};\n\nfunction formatFlowVariableHover(variable: FlowVariableMatch) {\n if (variable.type === 'global') {\n return [\n `**${t('link.flow.variable_type_global')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n `${t('link.flow.variable_name')}:\\`${variable.path}\\``,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'builtin') {\n const builtinTips = flowDesignerDAO.getBuiltinVariableTips(variable.firstPart);\n return [\n `**${t('link.flow.variable_type_builtin')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n builtinTips,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'node') {\n return [\n `**${t('link.flow.variable_type_node')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n variable.path ? `${t('link.flow.variable_field')}:\\`${variable.path}\\`` : '',\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n return [\n `**${t('link.flow.variable_type_platform')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n ].join('\\n\\n');\n}\n\nconst toMarkerData = (marker: monaco.editor.IMarker): monaco.editor.IMarkerData => ({\n code: marker.code,\n severity: marker.severity,\n message: marker.message,\n source: marker.source,\n startLineNumber: marker.startLineNumber,\n startColumn: marker.startColumn,\n endLineNumber: marker.endLineNumber,\n endColumn: marker.endColumn,\n modelVersionId: marker.modelVersionId,\n relatedInformation: marker.relatedInformation,\n tags: marker.tags,\n});\n\nfunction filterFlowVariableMarkers(\n monacoInstance: MonacoInstance,\n model: monaco.editor.ITextModel,\n) {\n const variables = extractFlowVariables(model.getValue());\n if (!variables.length) {\n return;\n }\n\n const markers = monacoInstance.editor.getModelMarkers({ resource: model.uri });\n const markersByOwner = new Map<string, monaco.editor.IMarker[]>();\n\n markers.forEach((marker) => {\n const ownerMarkers = markersByOwner.get(marker.owner) ?? [];\n ownerMarkers.push(marker);\n markersByOwner.set(marker.owner, ownerMarkers);\n });\n\n markersByOwner.forEach((ownerMarkers, owner) => {\n const nextMarkers = ownerMarkers.filter(\n (marker) => !variables.some((variable) => doesRangeIntersectFlowVariable(variable, marker)),\n );\n\n if (nextMarkers.length !== ownerMarkers.length) {\n monacoInstance.editor.setModelMarkers(model, owner, nextMarkers.map(toMarkerData));\n }\n });\n}\n\nfunction initPrompt(monaco, language: 'javascript' | 'json') {\n const suggestions = [].map((item) => {\n return {\n insertText: item,\n kind: monaco.languages.CompletionItemKind.Function, // 对应提示图标的不同\n label: item,\n };\n });\n return monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems() {\n return {\n suggestions,\n };\n },\n quickSuggestions: true, // 默认提示关闭\n triggerCharacters: ['{', '.', '=', ':'], // 触发提示的字符 可以定义多个\n });\n}\nfunction initLanguageAndHoverSettings(monaco) {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2015,\n allowNonTsExtensions: true,\n });\n return monaco.languages.registerCompletionItemProvider('javascript', {\n provideCompletionItems: () => {\n const snippets = jsSnippets as any;\n\n return {\n suggestions: snippets.snippets.map((snippet) => ({\n label: snippet.trigger,\n kind: monaco.languages.CompletionItemKind.Method,\n detail: snippet.desc ?? '',\n insertText: snippet.content,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n })),\n };\n },\n });\n}\n\nexport interface IOnlineIDEProps {\n initialValue?: string;\n\n nodeId?: string;\n\n onChange?: (value: string) => void;\n\n onFinish: (value: string) => void;\n\n onCancel: () => void;\n\n open?: boolean;\n\n language?: 'javascript' | 'json';\n\n showVariableSidebar?: boolean;\n}\n\nexport default function OnlineIDE(props: IOnlineIDEProps) {\n const { open, nodeId, initialValue, language = 'javascript', showVariableSidebar = true } = props;\n\n const editorInstance = useRef<EditorInstance>(null);\n const languageDisposables = useRef<monaco.IDisposable[]>([]);\n const state = useReactive({\n code: '',\n range: new monaco.Range(1, 1, 1, 1) as any,\n });\n const editorDidMount: EditorDidMount = (editor, monaco) => {\n editor.onDidChangeCursorPosition((event) => {\n // 获取当前光标的位置\n const position = event.position;\n // 保存光标位置,可以将其存储在一个变量或者其他地方\n const { lineNumber = 0, column = 0 } = position;\n state.range = new monaco.Range(lineNumber, column, lineNumber, column);\n });\n editorInstance.current = editor as EditorInstance;\n\n // 注册鼠标hover事件\n editor.focus();\n state.code = editor.getValue();\n const hoverDisposable = monaco.languages.registerHoverProvider(language, {\n provideHover: (model, position) => {\n // 根据鼠标位置和文本内容,计算需要显示的自定义 hover 内容\n // 这里可以使用你的位置信息和内容信息进行逻辑处理和自定义展示\n // 返回一个包含自定义 hover 内容的 Promise 对象\n\n // 示例:返回一个包含位置信息和内容信息的字符串\n\n return new Promise((resolve) => {\n const matches = extractFlowVariables(model.getValue());\n const locatedVariable = matches.find((item) =>\n isPositionInFlowVariable(item, position.lineNumber, position.column),\n );\n\n if (!locatedVariable) {\n resolve(null);\n return;\n }\n\n resolve({\n range: new monaco.Range(\n locatedVariable.startLine,\n locatedVariable.startColumn,\n locatedVariable.endLine,\n locatedVariable.endColumn,\n ),\n contents: [{ value: formatFlowVariableHover(locatedVariable) }],\n });\n });\n },\n });\n\n const model = editor.getModel();\n if (model) {\n let filteringMarkers = false;\n const markerDisposable = monaco.editor.onDidChangeMarkers((uris) => {\n if (filteringMarkers || !uris.some((uri) => uri.toString() === model.uri.toString())) {\n return;\n }\n\n filteringMarkers = true;\n window.setTimeout(() => {\n try {\n filterFlowVariableMarkers(monaco, model);\n } finally {\n filteringMarkers = false;\n }\n }, 0);\n });\n\n filterFlowVariableMarkers(monaco, model);\n editor.onDidDispose(() => markerDisposable.dispose());\n }\n editor.onDidDispose(() => hoverDisposable.dispose());\n };\n const beforeMount = (monaco) => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [initPrompt(monaco, language)];\n if (language === 'javascript') {\n languageDisposables.current.push(initLanguageAndHoverSettings(monaco));\n }\n };\n\n useEffect(\n () => () => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [];\n },\n [],\n );\n\n const onInsert = (nodeVariableText: string) => {\n const content = [\n {\n range: state.range,\n text: nodeVariableText,\n forceMoveMarkers: true,\n },\n ];\n if (editorInstance.current && state.range) {\n editorInstance.current.executeEdits('my-source', content);\n }\n };\n const onFinish = () => {\n props.onFinish?.(state.code);\n };\n const ideContainerRef = useRef(null);\n const size = useSize(ideContainerRef);\n return createPortal(\n <div\n className={styles.modalContainer}\n ref={ideContainerRef}\n style={{ display: open ? 'flex' : 'none' }}\n >\n <div className={styles.editorContainer} id=\"javascript-code-editor\">\n {showVariableSidebar ? (\n <div className={styles.sider}>\n <Sider\n onCancel={props.onCancel}\n onFinish={onFinish}\n editor={editorInstance.current}\n nodeId={nodeId as string}\n open={open!}\n onInsert={onInsert}\n />\n </div>\n ) : null}\n\n <div className={styles.main}>\n <div className={styles.header}>\n <TitleControl language={language} />\n\n <ToolBar onCancel={props.onCancel} onFinish={onFinish} />\n </div>\n <div className={styles.editor}>\n <MonacoEditor\n width=\"100%\"\n key={nodeId}\n height={(size?.height ?? 0) - 40}\n language={language}\n theme=\"vs-dark\"\n value={initialValue}\n options={OPTIONS}\n onChange={(value) => {\n state.code = value;\n }}\n editorWillMount={beforeMount}\n editorDidMount={editorDidMount}\n />\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"names":["IDEVariableModal","props","nodeId","onInsert","open","event$","useEventEmitter","value","DrawerContext","jsx","styles","VariableModal","Sider","jsxs","TitleControl","language","FormattedMessage","ToolBar","Button","CloseCircleFilled","CheckCircleFilled","OPTIONS","formatFlowVariableHover","variable","t","builtinTips","flowDesignerDAO","toMarkerData","marker","filterFlowVariableMarkers","monacoInstance","model","variables","extractFlowVariables","markers","markersByOwner","ownerMarkers","owner","nextMarkers","doesRangeIntersectFlowVariable","initPrompt","monaco","suggestions","item","initLanguageAndHoverSettings","jsSnippets","snippet","OnlineIDE","initialValue","showVariableSidebar","editorInstance","useRef","languageDisposables","state","useReactive","editorDidMount","editor","event","position","lineNumber","column","hoverDisposable","resolve","locatedVariable","isPositionInFlowVariable","filteringMarkers","markerDisposable","uris","uri","beforeMount","disposable","useEffect","nodeVariableText","content","onFinish","_a","ideContainerRef","size","useSize","createPortal","MonacoEditor"],"mappings":";;;;;;;;;;;;;;;;;;;GAWaA,KAAiD,CAACC,MAAU;AACvE,QAAM,EAAE,QAAAC,GAAQ,UAAAC,GAAU,MAAAC,EAAA,IAASH,GAC7BI,IAASC,EAAA;AAEf,SAAAD,EAAO,gBAAgB,CAACE,MAAe;AACrC,IAAIA,EAAM,SAAS,YACjBJ,EAASI,EAAM,UAAU;AAAA,EAE7B,CAAC,qBAGEC,EAAc,UAAd,EAAuB,OAAO,EAAE,QAAAH,KAC/B,UAAA,gBAAAI,EAAC,SAAI,WAAWC,GAAO,YACrB,UAAA,gBAAAD,EAACE,GAAA,EAAc,QAAAT,GAAgB,UAAAC,GAAoB,MAAAC,EAAA,CAAY,GACjE,GACF;AAEJ;;;ACjBO,SAASQ,GAAMX,GAAoB;AACxC,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWH,GAAO,gBACrB,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACT,IAAA,EAAiB,MAAMC,EAAM,MAAM,QAAQA,EAAM,QAAQ,UAAUA,EAAM,SAAA,CAAU,GACtF;AAAA,sBACC,OAAA,EAAI,OAAO,EAAE,WAAW,WAAS,CAAG;AAAA,EAAA,GACvC;AAEJ;ACdO,SAASa,GAAa,EAAE,UAAAC,IAAW,gBAAmC;AAC3E,SACE,gBAAAF,EAAC,MAAA,EAAG,OAAO,EAAE,OAAO,QAAQ,UAAU,IAAI,QAAQ,QAAA,GAChD,UAAA;AAAA,IAAA,gBAAAJ,EAACO,GAAA,EAAiB,IAAG,wBAAA,CAAwB;AAAA,IAAE;AAAA,IAAGD,EAAS,YAAA;AAAA,IAAc;AAAA,EAAA,GAC3E;AAEJ;ACJO,SAASE,GAAQhB,GAAsB;AAC5C,SACE,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA,gBAAAJ;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO,EAAE,aAAa,GAAA;AAAA,YACtB,UAAU;AAAA,YACV,QAAM;AAAA,YACN,SAASjB,EAAM;AAAA,YACf,MAAM,gBAAAQ,EAACU,GAAA,EAAkB,SAASlB,EAAM,UAAU;AAAA,YAElD,UAAA,gBAAAQ,EAACO,GAAA,EAAiB,IAAG,yBAAA,CAAyB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEhD,gBAAAP;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAO,EAAE,aAAa,GAAA;AAAA,YACtB,SAASjB,EAAM;AAAA,YACf,wBAAOmB,GAAA,EAAkB;AAAA,YAEzB,UAAA,gBAAAX,EAACO,GAAA,EAAiB,IAAG,yBAAA,CAAyB;AAAA,UAAA;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA;AAAA,EAAA;AAGN;;;;;GCZMK,KAAmB;AAAA,EACvB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,SAAS;AAAA,IACP,KAAK;AAAA,EAAA;AAET;AAEA,SAASC,GAAwBC,GAA6B;AAC5D,MAAIA,EAAS,SAAS;AACpB,WAAO;AAAA,MACL,KAAKC,EAAE,gCAAgC,CAAC;AAAA,MACxC,GAAGA,EAAE,yBAAyB,CAAC,MAAMD,EAAS,KAAK;AAAA,MACnD,GAAGC,EAAE,yBAAyB,CAAC,MAAMD,EAAS,IAAI;AAAA,IAAA,EAEjD,OAAO,OAAO,EACd,KAAK;AAAA;AAAA,CAAM;AAEhB,MAAIA,EAAS,SAAS,WAAW;AAC/B,UAAME,IAAcC,EAAgB,uBAAuBH,EAAS,SAAS;AAC7E,WAAO;AAAA,MACL,KAAKC,EAAE,iCAAiC,CAAC;AAAA,MACzC,GAAGA,EAAE,yBAAyB,CAAC,MAAMD,EAAS,KAAK;AAAA,MACnDE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK;AAAA;AAAA,CAAM;AAAA,EAChB;AACA,SAAIF,EAAS,SAAS,SACb;AAAA,IACL,KAAKC,EAAE,8BAA8B,CAAC;AAAA,IACtC,GAAGA,EAAE,yBAAyB,CAAC,MAAMD,EAAS,KAAK;AAAA,IACnDA,EAAS,OAAO,GAAGC,EAAE,0BAA0B,CAAC,MAAMD,EAAS,IAAI,OAAO;AAAA,EAAA,EAEzE,OAAO,OAAO,EACd,KAAK;AAAA;AAAA,CAAM,IAET;AAAA,IACL,KAAKC,EAAE,kCAAkC,CAAC;AAAA,IAC1C,GAAGA,EAAE,yBAAyB,CAAC,MAAMD,EAAS,KAAK;AAAA,EAAA,EACnD,KAAK;AAAA;AAAA,CAAM;AACf;AAEA,MAAMI,KAAe,CAACC,OAA8D;AAAA,EAClF,MAAMA,EAAO;AAAA,EACb,UAAUA,EAAO;AAAA,EACjB,SAASA,EAAO;AAAA,EAChB,QAAQA,EAAO;AAAA,EACf,iBAAiBA,EAAO;AAAA,EACxB,aAAaA,EAAO;AAAA,EACpB,eAAeA,EAAO;AAAA,EACtB,WAAWA,EAAO;AAAA,EAClB,gBAAgBA,EAAO;AAAA,EACvB,oBAAoBA,EAAO;AAAA,EAC3B,MAAMA,EAAO;AACf;AAEA,SAASC,EACPC,GACAC,GACA;AACA,QAAMC,IAAYC,EAAqBF,EAAM,SAAA,CAAU;AACvD,MAAI,CAACC,EAAU;AACb;AAGF,QAAME,IAAUJ,EAAe,OAAO,gBAAgB,EAAE,UAAUC,EAAM,KAAK,GACvEI,wBAAqB,IAAA;AAE3B,EAAAD,EAAQ,QAAQ,CAACN,MAAW;AAC1B,UAAMQ,IAAeD,EAAe,IAAIP,EAAO,KAAK,KAAK,CAAA;AACzD,IAAAQ,EAAa,KAAKR,CAAM,GACxBO,EAAe,IAAIP,EAAO,OAAOQ,CAAY;AAAA,EAC/C,CAAC,GAEDD,EAAe,QAAQ,CAACC,GAAcC,MAAU;AAC9C,UAAMC,IAAcF,EAAa;AAAA,MAC/B,CAACR,MAAW,CAACI,EAAU,KAAK,CAACT,MAAagB,EAA+BhB,GAAUK,CAAM,CAAC;AAAA,IAAA;AAG5F,IAAIU,EAAY,WAAWF,EAAa,UACtCN,EAAe,OAAO,gBAAgBC,GAAOM,GAAOC,EAAY,IAAIX,EAAY,CAAC;AAAA,EAErF,CAAC;AACH;AAEA,SAASa,GAAWC,GAAQ1B,GAAiC;AAC3D,QAAM2B,IAAc,CAAA,EAAG,IAAI,CAACC,OACnB;AAAA,IACL,YAAYA;AAAA,IACZ,MAAMF,EAAO,UAAU,mBAAmB;AAAA;AAAA,IAC1C,OAAOE;AAAA,EAAA,EAEV;AACD,SAAOF,EAAO,UAAU,+BAA+B1B,GAAU;AAAA,IAC/D,yBAAyB;AACvB,aAAO;AAAA,QACL,aAAA2B;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,kBAAkB;AAAA;AAAA,IAClB,mBAAmB,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAAA,CACvC;AACH;AACA,SAASE,GAA6BH,GAAQ;AAC5CA,SAAAA,EAAO,UAAU,WAAW,mBAAmB,sBAAsB;AAAA,IACnE,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EAAA,CACrB,GAGDA,EAAO,UAAU,WAAW,mBAAmB,mBAAmB;AAAA,IAChE,QAAQA,EAAO,UAAU,WAAW,aAAa;AAAA,IACjD,sBAAsB;AAAA,EAAA,CACvB,GACMA,EAAO,UAAU,+BAA+B,cAAc;AAAA,IACnE,wBAAwB,OAGf;AAAA,MACL,aAHeI,GAGO,SAAS,IAAI,CAACC,OAAa;AAAA,QAC/C,OAAOA,EAAQ;AAAA,QACf,MAAML,EAAO,UAAU,mBAAmB;AAAA,QAC1C,QAAQK,EAAQ,QAAQ;AAAA,QACxB,YAAYA,EAAQ;AAAA,QACpB,iBAAiBL,EAAO,UAAU,6BAA6B;AAAA,MAAA,EAC/D;AAAA,IAAA;AAAA,EAEN,CACD;AACH;AAoBA,SAAwBM,GAAU9C,GAAwB;AACxD,QAAM,EAAE,MAAAG,GAAM,QAAAF,GAAQ,cAAA8C,GAAc,UAAAjC,IAAW,cAAc,qBAAAkC,IAAsB,OAAShD,GAEtFiD,IAAiBC,EAAuB,IAAI,GAC5CC,IAAsBD,EAA6B,EAAE,GACrDE,IAAQC,EAAY;AAAA,IACxB,MAAM;AAAA,IACN,OAAO,IAAIb,EAAO,MAAM,GAAG,GAAG,GAAG,CAAC;AAAA,EAAA,CACnC,GACKc,IAAiC,CAACC,GAAQf,MAAW;AACzD,IAAAe,EAAO,0BAA0B,CAACC,MAAU;AAE1C,YAAMC,IAAWD,EAAM,UAEjB,EAAE,YAAAE,IAAa,GAAG,QAAAC,IAAS,MAAMF;AACvC,MAAAL,EAAM,QAAQ,IAAIZ,EAAO,MAAMkB,GAAYC,GAAQD,GAAYC,CAAM;AAAA,IACvE,CAAC,GACDV,EAAe,UAAUM,GAGzBA,EAAO,MAAA,GACPH,EAAM,OAAOG,EAAO,SAAA;AACpB,UAAMK,IAAkBpB,EAAO,UAAU,sBAAsB1B,GAAU;AAAA,MACvE,cAAc,CAACgB,GAAO2B,MAOb,IAAI,QAAQ,CAACI,MAAY;AAE9B,cAAMC,IADU9B,EAAqBF,EAAM,SAAA,CAAU,EACrB;AAAA,UAAK,CAACY,MACpCqB,EAAyBrB,GAAMe,EAAS,YAAYA,EAAS,MAAM;AAAA,QAAA;AAGrE,YAAI,CAACK,GAAiB;AACpB,UAAAD,EAAQ,IAAI;AACZ;AAAA,QACF;AAEA,QAAAA,EAAQ;AAAA,UACN,OAAO,IAAIrB,EAAO;AAAA,YAChBsB,EAAgB;AAAA,YAChBA,EAAgB;AAAA,YAChBA,EAAgB;AAAA,YAChBA,EAAgB;AAAA,UAAA;AAAA,UAElB,UAAU,CAAC,EAAE,OAAOzC,GAAwByC,CAAe,GAAG;AAAA,QAAA,CAC/D;AAAA,MACH,CAAC;AAAA,IACH,CACD,GAEKhC,IAAQyB,EAAO,SAAA;AACrB,QAAIzB,GAAO;AACT,UAAIkC,IAAmB;AACvB,YAAMC,IAAmBzB,EAAO,OAAO,mBAAmB,CAAC0B,MAAS;AAClE,QAAIF,KAAoB,CAACE,EAAK,KAAK,CAACC,MAAQA,EAAI,SAAA,MAAerC,EAAM,IAAI,SAAA,CAAU,MAInFkC,IAAmB,IACnB,OAAO,WAAW,MAAM;AACtB,cAAI;AACF,YAAApC,EAA0BY,GAAQV,CAAK;AAAA,UACzC,UAAA;AACE,YAAAkC,IAAmB;AAAA,UACrB;AAAA,QACF,GAAG,CAAC;AAAA,MACN,CAAC;AAED,MAAApC,EAA0BY,GAAQV,CAAK,GACvCyB,EAAO,aAAa,MAAMU,EAAiB,QAAA,CAAS;AAAA,IACtD;AACA,IAAAV,EAAO,aAAa,MAAMK,EAAgB,QAAA,CAAS;AAAA,EACrD,GACMQ,IAAc,CAAC5B,MAAW;AAC9B,IAAAW,EAAoB,QAAQ,QAAQ,CAACkB,MAAe;AAClD,MAAAA,EAAW,QAAA;AAAA,IACb,CAAC,GACDlB,EAAoB,UAAU,CAACZ,GAAWC,GAAQ1B,CAAQ,CAAC,GACvDA,MAAa,gBACfqC,EAAoB,QAAQ,KAAKR,GAA6BH,CAAM,CAAC;AAAA,EAEzE;AAEA,EAAA8B;AAAA,IACE,MAAM,MAAM;AACV,MAAAnB,EAAoB,QAAQ,QAAQ,CAACkB,MAAe;AAClD,QAAAA,EAAW,QAAA;AAAA,MACb,CAAC,GACDlB,EAAoB,UAAU,CAAA;AAAA,IAChC;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,QAAMjD,IAAW,CAACqE,MAA6B;AAC7C,UAAMC,IAAU;AAAA,MACd;AAAA,QACE,OAAOpB,EAAM;AAAA,QACb,MAAMmB;AAAA,QACN,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAEF,IAAItB,EAAe,WAAWG,EAAM,SAClCH,EAAe,QAAQ,aAAa,aAAauB,CAAO;AAAA,EAE5D,GACMC,IAAW,MAAM;;AACrB,KAAAC,IAAA1E,EAAM,aAAN,QAAA0E,EAAA,KAAA1E,GAAiBoD,EAAM;AAAA,EACzB,GACMuB,IAAkBzB,EAAO,IAAI,GAC7B0B,IAAOC,EAAQF,CAAe;AACpC,SAAOG;AAAA,IACL,gBAAAtE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,EAAO;AAAA,QAClB,KAAKkE;AAAA,QACL,OAAO,EAAE,SAASxE,IAAO,SAAS,OAAA;AAAA,QAElC,4BAAC,OAAA,EAAI,WAAWM,EAAO,iBAAiB,IAAG,0BACxC,UAAA;AAAA,UAAAuC,IACC,gBAAAxC,EAAC,OAAA,EAAI,WAAWC,EAAO,OACrB,UAAA,gBAAAD;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,UAAUX,EAAM;AAAA,cAChB,UAAAyE;AAAA,cACA,QAAQxB,EAAe;AAAA,cACvB,QAAAhD;AAAA,cACA,MAAAE;AAAA,cACA,UAAAD;AAAA,YAAA;AAAA,UAAA,GAEJ,IACE;AAAA,UAEJ,gBAAAU,EAAC,OAAA,EAAI,WAAWH,EAAO,MACrB,UAAA;AAAA,YAAA,gBAAAG,EAAC,OAAA,EAAI,WAAWH,EAAO,QACrB,UAAA;AAAA,cAAA,gBAAAD,EAACK,MAAa,UAAAC,GAAoB;AAAA,cAElC,gBAAAN,EAACQ,IAAA,EAAQ,UAAUhB,EAAM,UAAU,UAAAyE,EAAA,CAAoB;AAAA,YAAA,GACzD;AAAA,YACA,gBAAAjE,EAAC,OAAA,EAAI,WAAWC,EAAO,QACrB,UAAA,gBAAAD;AAAA,cAACuE;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBAEN,UAASH,KAAA,gBAAAA,EAAM,WAAU,KAAK;AAAA,gBAC9B,UAAA9D;AAAA,gBACA,OAAM;AAAA,gBACN,OAAOiC;AAAA,gBACP,SAAS3B;AAAA,gBACT,UAAU,CAACd,MAAU;AACnB,kBAAA8C,EAAM,OAAO9C;AAAA,gBACf;AAAA,gBACA,iBAAiB8D;AAAA,gBACjB,gBAAAd;AAAA,cAAA;AAAA,cAVKrD;AAAA,YAAA,EAWP,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAEb;"}
|