@digitalsee-ai/rcs 2.0.5-beta1 → 2.0.5-beta3
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/dist/components/digitalsee/workflow/Canvas/hooks/useWorkflowCanvasState.d.ts +2 -7
- package/dist/components/digitalsee/workflow/Edges/BaseEdge.d.ts +0 -1
- package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.d.ts +2 -0
- package/dist/components/digitalsee/workflow/NodesConfig/NodePackageConfig/fields/plugin/variableHighlight.d.ts +26 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JavascriptTagEditorField/plugin/placeholders.d.ts +1 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/ActionRow.d.ts +20 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/AppDetailOverlay.d.ts +32 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategorySearchEmptyState.d.ts +12 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryTabs.d.ts +2 -2
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/HighlightText.d.ts +31 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCard.d.ts +6 -3
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/PanelHeader.d.ts +7 -10
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/constants.d.ts +9 -0
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useConnectableNodeSelector.d.ts +2 -3
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNavigation.d.ts +8 -1
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useSearch.d.ts +12 -5
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/messages.d.ts +47 -0
- package/dist/components/digitalsee/workflow/hooks/use-nodes-interaction.d.ts +3 -14
- package/dist/components/digitalsee/workflow/hooks/usePanel.d.ts +1 -0
- package/dist/components/digitalsee/workflow/hooks/useWorkflow.d.ts +8 -0
- package/dist/components/digitalsee/workflow/store/panelSlice.d.ts +14 -0
- package/dist/components/digitalsee/workflow/store/workflowSlice.d.ts +7 -1
- package/dist/components/digitalsee/workflow/types/Edge.d.ts +1 -2
- package/dist/components/digitalsee/workflow/types/Node.d.ts +0 -2
- package/dist/components/digitalsee/workflow/types/NodeAddContext.d.ts +2 -0
- package/dist/components/digitalsee/workflow/utils/mcpCanvas.d.ts +6 -1
- package/dist/components/digitalsee/workflow/utils/nodeDataFormatter.d.ts +5 -0
- package/dist/components/digitalsee/workflow/utils/portConnectionValidationMessages.d.ts +2 -0
- package/dist/components/digitalsee/workflow/utils/triggerNode.d.ts +15 -1
- package/dist/components/dynamic-form/FieldRenderer.d.ts +3 -0
- package/dist/components/dynamic-form/components/ValueModeWrapper/index.d.ts +2 -0
- package/dist/components/dynamic-form/context/FieldRendererContext.d.ts +23 -0
- package/dist/components/dynamic-form/index.d.ts +1 -0
- package/dist/components/index.d.ts +0 -1
- package/dist/{index-DpaoO6Cc.mjs → index-D1vpJi7z.mjs} +22944 -22378
- package/dist/index-nWANt9PP.mjs +167 -0
- package/dist/locales/en-US/link/flow.d.ts +2 -0
- package/dist/locales/en-US/link/nodeSelector.d.ts +41 -0
- package/dist/locales/en-US.d.ts +40 -0
- package/dist/locales/zh-CN/link/flow.d.ts +2 -0
- package/dist/locales/zh-CN/link/nodeSelector.d.ts +41 -0
- package/dist/locales/zh-CN.d.ts +40 -0
- package/dist/locales/zh-TW/link/flow.d.ts +2 -0
- package/dist/locales/zh-TW/link/nodeSelector.d.ts +41 -0
- package/dist/locales/zh-TW.d.ts +40 -0
- package/dist/rcs.css +1 -1
- package/dist/rcs.es.js +25 -24
- package/dist/rcs.umd.js +137 -118
- package/package.json +5 -24
- package/dist/components/digitalsee/workflow/Canvas/hooks/useNodeFormDraftCache.d.ts +0 -14
- package/dist/components/digitalsee/workflow/Handles/OutputHandleWithButton.d.ts +0 -15
- package/dist/components/digitalsee/workflow/Nodes/NodeStatusDemo.d.ts +0 -7
- package/dist/components/digitalsee/workflow/Nodes/components/NodeDescriptionExample.d.ts +0 -0
- package/dist/components/digitalsee/workflow/NodesConfig/components/AccountSelect/components/DynamicAccountForm/fields/FixedObjectField/index.d.ts +0 -5
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/FixedObjectField/index.d.ts +0 -11
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonField/index.d.ts +0 -5
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/common-placeholder-theme.d.ts +0 -57
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/editor.d.ts +0 -1
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/extensions.d.ts +0 -11
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/index.d.ts +0 -3
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/interface.d.ts +0 -29
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/base-theme.d.ts +0 -1
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/custom-completions.d.ts +0 -5
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/functions.d.ts +0 -3
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/hint.d.ts +0 -11
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/keywords.d.ts +0 -4
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/JsonTagField/plugin/placeholders.d.ts +0 -3
- package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/TextAreaField/index.d.ts +0 -6
- package/dist/components/digitalsee/workflow/NodesConfig/components/online-ide/components/IDEVariableModal/tree-help.d.ts +0 -49
- package/dist/components/digitalsee/workflow/NodesConfig/components/online-ide/helper/matchVar.d.ts +0 -7
- package/dist/components/digitalsee/workflow/Panels/CanvasConfigDebugger.d.ts +0 -37
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/ActionList.d.ts +0 -15
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryContent.d.ts +0 -17
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryItem.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryList.d.ts +0 -14
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeItem.d.ts +0 -13
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/SearchResults.d.ts +0 -14
- package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useActions.d.ts +0 -18
- package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/components/NodeListItem.d.ts +0 -8
- package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/hooks/useNodeList.d.ts +0 -14
- package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/index.d.ts +0 -10
- package/dist/components/digitalsee/workflow/builtin/controls/MutilRowGuard/index.d.ts +0 -13
- package/dist/components/digitalsee/workflow/constants/nodePackageHandles.d.ts +0 -10
- package/dist/components/digitalsee/workflow/events/eventBus.d.ts +0 -18
- package/dist/components/digitalsee/workflow/examples/global-config-example.d.ts +0 -12
- package/dist/components/digitalsee/workflow/store/types.d.ts +0 -11
- package/dist/components/digitalsee/workflow/utils/edgeConverters.d.ts +0 -30
- package/dist/components/digitalsee/workflow/utils/flowDataAdapterNext.d.ts +0 -13
- package/dist/components/digitalsee/workflow/utils/nodeSummaryAdapter.d.ts +0 -15
- package/dist/components/dynamic-form/context/EventEngineContext.d.ts +0 -42
- package/dist/components/dynamic-form/registry/index.d.ts +0 -3
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/index-CNiN54LX.mjs +0 -288
- package/dist/locales/en-US/link/component.d.ts +0 -76
- package/dist/locales/en-US/link/log.d.ts +0 -40
- package/dist/locales/en-US/link/template.d.ts +0 -6
- package/dist/locales/zh-CN/link/component.d.ts +0 -77
- package/dist/locales/zh-CN/link/log.d.ts +0 -41
- package/dist/locales/zh-CN/link/template.d.ts +0 -6
- package/dist/locales/zh-TW/link/component.d.ts +0 -76
- package/dist/locales/zh-TW/link/log.d.ts +0 -37
- package/dist/locales/zh-TW/link/template.d.ts +0 -6
- package/dist/storybook-utils.d.ts +0 -4
- package/dist/utils.d.ts +0 -2
|
@@ -8,15 +8,10 @@ import { useWorkflow } from '../../hooks/useWorkflow';
|
|
|
8
8
|
import { useAppDispatch } from '../../store';
|
|
9
9
|
import { CanvasAPI, EdgeConfig as EngineEdgeConfig } from '../../types/engine';
|
|
10
10
|
import { FlowDraftPayload } from '../../types/flowVersion';
|
|
11
|
+
import { TriggerNodeInfo } from '../../utils/triggerNode';
|
|
11
12
|
import { Connection, Edge, EdgeChange, Node, NodeChange, useEdgesState, useNodesState, useReactFlow, useStoreApi } from '@xyflow/react';
|
|
12
13
|
import { default as React } from 'react';
|
|
13
|
-
|
|
14
|
-
export interface TriggerNodeInfo {
|
|
15
|
-
/** trigger 节点 id */
|
|
16
|
-
id: string;
|
|
17
|
-
/** 是否为 MCP Server 触发画布(trigger 节点的 action_key 指向 MCP Server) */
|
|
18
|
-
isMcpServer: boolean;
|
|
19
|
-
}
|
|
14
|
+
export type { TriggerNodeInfo } from '../../utils/triggerNode';
|
|
20
15
|
export interface WorkflowCanvasStateResult {
|
|
21
16
|
nodes: Node[];
|
|
22
17
|
edges: Edge[];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ViewPlugin } from '@codemirror/view';
|
|
2
|
+
/** {{变量}} 高亮的 class 名,便于调试定位与外部样式覆盖 */
|
|
3
|
+
export declare const VARIABLE_HIGHLIGHT_CLASS = "workflow-code-variable";
|
|
4
|
+
/**
|
|
5
|
+
* 匹配带路径的节点变量 {{N节点ID.字段}}、全局变量 {{global.x}} 以及内置变量
|
|
6
|
+
* {{sys_tenant_id}} / {{response}},不把任意 {{...}} 当作变量。
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildVariableRegExp: () => RegExp;
|
|
9
|
+
/**
|
|
10
|
+
* 变量在编辑器中的展示文本:隐藏 {{global. 与 {{N节点ID. 前缀,只保留字段路径。
|
|
11
|
+
* 例如 {{global.userName}} -> {{userName}},{{ N1.profile.name }} -> {{profile.name}}。
|
|
12
|
+
*/
|
|
13
|
+
export declare const buildVariableDisplayText: (raw: string) => string;
|
|
14
|
+
/**
|
|
15
|
+
* 给 CodeMirror 加 {{变量}} 高亮,并把变量块声明成原子区间。
|
|
16
|
+
*
|
|
17
|
+
* 结构与 JavascriptTagEditorField 的 placeholdersPlugin 保持一致:
|
|
18
|
+
* - 展示:用 replace 装饰把变量渲染成 {{字段路径}},隐藏 global. / N节点ID. 前缀,
|
|
19
|
+
* 不改变文档内容,复制、悬停提示与提交时仍是完整变量;
|
|
20
|
+
* - 原子区间:光标无法停在块中间(点击/方向键都落到块边界),选区端点也不会切进块内,
|
|
21
|
+
* 因此鼠标框选、双击与 Backspace/Delete 都是整块选中、整块删除。
|
|
22
|
+
*
|
|
23
|
+
* 做成工厂函数(同 placeholdersPlugin)是为了让每个编辑器实例持有独立的
|
|
24
|
+
* MatchDecorator 与正则实例,避免正则 lastIndex 在多实例间共享。
|
|
25
|
+
*/
|
|
26
|
+
export declare const variableHighlightPlugin: () => ViewPlugin<any, undefined>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { ViewPlugin } from '@codemirror/view';
|
|
2
2
|
import { PlaceholderThemesType } from '../interface';
|
|
3
|
+
export declare const buildPlaceholderRegExp: () => RegExp;
|
|
3
4
|
export declare const placeholdersPlugin: (themes: PlaceholderThemesType, mode?: string) => ViewPlugin<any, undefined>;
|
package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/ActionRow.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface ActionRowProps {
|
|
3
|
+
/** 动作名称,如「通用请求」。 */
|
|
4
|
+
title: string;
|
|
5
|
+
/** 动作说明,如「自定义 HTTP 请求,以文本接收响应」。 */
|
|
6
|
+
description?: string;
|
|
7
|
+
/** 空格分隔的搜索关键词,命中部分在动作名称中高亮。 */
|
|
8
|
+
highlight?: string;
|
|
9
|
+
/** 点击整行或右侧加号的回调。 */
|
|
10
|
+
onAdd?: () => void;
|
|
11
|
+
/** 添加动作进行中时禁用重复触发。 */
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 动作行组件
|
|
16
|
+
*
|
|
17
|
+
* 单条动作的可复用展示行:左侧标题与描述,右侧加号按钮,整行可点击
|
|
18
|
+
*/
|
|
19
|
+
declare const ActionRow: React.FC<ActionRowProps>;
|
|
20
|
+
export default ActionRow;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ActionItem, NodeTypeItem } from '../types';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
interface AppDetailOverlayProps {
|
|
4
|
+
/** 当前查看的应用(节点)信息。 */
|
|
5
|
+
node: NodeTypeItem;
|
|
6
|
+
/** 应用下的动作列表。 */
|
|
7
|
+
actions: ActionItem[];
|
|
8
|
+
/** 是否为搜索页进入。 */
|
|
9
|
+
hasSearch?: boolean;
|
|
10
|
+
/** 动作列表加载中。 */
|
|
11
|
+
loading?: boolean;
|
|
12
|
+
/** 动作列表加载失败。 */
|
|
13
|
+
error?: Error;
|
|
14
|
+
/** 重试加载动作列表。 */
|
|
15
|
+
onRetry?: () => void;
|
|
16
|
+
/** 添加动作进行中时禁用动作行重复触发。 */
|
|
17
|
+
adding?: boolean;
|
|
18
|
+
/** 返回搜索结果。 */
|
|
19
|
+
onBack: () => void;
|
|
20
|
+
/** 关闭弹层。 */
|
|
21
|
+
onClose: () => void;
|
|
22
|
+
/** 选中某个动作。 */
|
|
23
|
+
onActionSelect: (node: NodeTypeItem, action: ActionItem) => void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 应用详情弹层组件
|
|
27
|
+
*
|
|
28
|
+
* 浮在节点选择抽屉之上并完整覆盖抽屉:展示应用基础信息、应用内搜索框与动作列表,
|
|
29
|
+
* 点击右上角 X 或「返回搜索结果」关闭弹层
|
|
30
|
+
*/
|
|
31
|
+
declare const AppDetailOverlay: React.FC<AppDetailOverlayProps>;
|
|
32
|
+
export default AppDetailOverlay;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface CategorySearchEmptyStateProps {
|
|
3
|
+
/** 点击「搜索全部分类」的回调;不传时隐藏引导按钮。 */
|
|
4
|
+
onSearchAll?: () => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 分类搜索空状态组件
|
|
8
|
+
*
|
|
9
|
+
* 当前分类下搜索无结果时,引导用户更换关键词;仍可切到全部分类时额外提供「搜索全部分类」入口
|
|
10
|
+
*/
|
|
11
|
+
declare const CategorySearchEmptyState: React.FC<CategorySearchEmptyStateProps>;
|
|
12
|
+
export default CategorySearchEmptyState;
|
|
@@ -7,9 +7,9 @@ interface CategoryTabsProps {
|
|
|
7
7
|
onChange: (category: CategoryItem) => void;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* @description
|
|
10
|
+
* @description 分类下拉框组件,承载“全部 + 分类”的快捷筛选。
|
|
11
11
|
* @param {CategoryTabsProps} props 分类与交互参数。
|
|
12
|
-
* @returns {JSX.Element}
|
|
12
|
+
* @returns {JSX.Element} 分类下拉框渲染结果。
|
|
13
13
|
*/
|
|
14
14
|
declare const CategoryTabs: React.FC<CategoryTabsProps>;
|
|
15
15
|
export default CategoryTabs;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** 高亮片段标记类名,样式见 styles/modern-node-selector.less。 */
|
|
3
|
+
export declare const HIGHLIGHT_MARK_CLASS = "node-selector-highlight";
|
|
4
|
+
/** splitTextByKeywords 切分出的文本片段。 */
|
|
5
|
+
export interface HighlightSegment {
|
|
6
|
+
text: string;
|
|
7
|
+
/** 是否命中任一关键词。 */
|
|
8
|
+
hit: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @description 按空格分隔的关键词切分文本,返回保持原文顺序的片段数组。
|
|
12
|
+
* 匹配忽略大小写;关键词中的正则特殊字符会被转义,避免非法正则或误匹配。
|
|
13
|
+
* @param {string} text 待切分的原始文本。
|
|
14
|
+
* @param {string} keyword 空格分隔的搜索关键词,如「HTTP 创建」。
|
|
15
|
+
* @returns {HighlightSegment[]} 片段数组;文本为空或无有效关键词时返回单个未命中片段。
|
|
16
|
+
*/
|
|
17
|
+
export declare const splitTextByKeywords: (text: string, keyword: string) => HighlightSegment[];
|
|
18
|
+
interface HighlightTextProps {
|
|
19
|
+
/** 原始文本。 */
|
|
20
|
+
text: string;
|
|
21
|
+
/** 空格分隔的搜索关键词;为空时按普通文本渲染。 */
|
|
22
|
+
highlight?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 搜索关键词高亮文本
|
|
26
|
+
*
|
|
27
|
+
* 将文本按关键词切分后渲染,命中片段包上高亮标记;
|
|
28
|
+
* 配合 modern-node-selector.less 的 .node-selector-highlight 样式使用
|
|
29
|
+
*/
|
|
30
|
+
declare const HighlightText: React.FC<HighlightTextProps>;
|
|
31
|
+
export default HighlightText;
|
package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCard.d.ts
CHANGED
|
@@ -5,10 +5,13 @@ interface NodeCardProps {
|
|
|
5
5
|
expanded: boolean;
|
|
6
6
|
actions: ActionItem[];
|
|
7
7
|
loading: boolean;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/** 添加动作进行中时禁用动作行重复触发。 */
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** 节点搜索关键词,在应用名与展开后的动作名称中高亮命中片段。 */
|
|
11
|
+
highlight?: string;
|
|
10
12
|
onActionSelect: (node: NodeTypeItem, action: ActionItem) => void;
|
|
11
|
-
|
|
13
|
+
/** 点击「全部动作」打开应用详情弹层。 */
|
|
14
|
+
onOpenAppDetail?: (node: NodeTypeItem) => void;
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
14
17
|
* @description 节点卡片,负责展示节点基础信息与展开后的动作列表。
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { CategoryItem, NodeTypeItem } from '../types';
|
|
2
1
|
import { default as React } from 'react';
|
|
3
2
|
interface PanelHeaderProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
selectedNode: NodeTypeItem | null;
|
|
7
|
-
onBack?: (e: React.MouseEvent) => void;
|
|
3
|
+
/** 抽屉标题。 */
|
|
4
|
+
title: string;
|
|
8
5
|
onClose: () => void;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
showBackButton?: boolean;
|
|
6
|
+
/** 插入位置提示文案,如「插入到「遍历用户」之后」;不传时不展示。 */
|
|
7
|
+
insertHint?: string;
|
|
12
8
|
}
|
|
13
9
|
/**
|
|
14
|
-
* @description
|
|
15
|
-
*
|
|
10
|
+
* @description 节点选择抽屉头部:标题、(可选)插入位置提示与关闭按钮。
|
|
11
|
+
* 返回按钮与层级路径随抽屉改版退场;标题由调用方按协议决定,不再内置兜底文案。
|
|
12
|
+
* @param {PanelHeaderProps} props 标题、关闭句柄与插入位置提示。
|
|
16
13
|
* @returns {JSX.Element} 头部渲染结果。
|
|
17
14
|
*/
|
|
18
15
|
declare const PanelHeader: React.FC<PanelHeaderProps>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 节点选择抽屉的分页常量。
|
|
3
|
+
*
|
|
4
|
+
* 后端 `/acm/node-package/plugins/connectable` 用 uep-service 的 `QueryPage` 切页
|
|
5
|
+
* (`base/common/.../dto/QueryPage.java`):`size` 缺省 50(DEFAULT_PAGE_SIZE),
|
|
6
|
+
* 上限 100(MAX_PAGE_SIZE),且超过上限时会被重置成 50 而不是夹到 100。
|
|
7
|
+
*/
|
|
8
|
+
/** 搜索/浏览应用列表的每页条数,与后端默认页大小对齐。 */
|
|
9
|
+
export declare const SEARCH_PAGE_SIZE = 50;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LinkSearchParams, ModernNodeSelectorProps, NodeTypeItem } from '../types';
|
|
2
2
|
import { NodeAddInfo } from '../../../types/NodeAddContext';
|
|
3
3
|
type SearchHandler = NonNullable<ModernNodeSelectorProps['onSearch']>;
|
|
4
4
|
type CategoryHandler = NonNullable<ModernNodeSelectorProps['onFetchCategories']>;
|
|
@@ -13,7 +13,6 @@ interface UseConnectableNodeSelectorProps {
|
|
|
13
13
|
onSearch?: SearchHandler;
|
|
14
14
|
onFetchCategories?: CategoryHandler;
|
|
15
15
|
onFetchNodesByCategory?: NodeCategoryHandler;
|
|
16
|
-
fetchLegacyNodeActions: (node: NodeTypeItem, options?: FetchNodeActionOptions) => Promise<ActionItem[]>;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
18
|
* @description 为 NodePackage 连线场景选择数据源,并封装查询与边中插入求交。
|
|
@@ -24,6 +23,6 @@ export declare function useConnectableNodeSelector({ nodeSelectorVisible, effect
|
|
|
24
23
|
onSearch: (params?: LinkSearchParams) => Promise<import('../types').NodeFetchResult>;
|
|
25
24
|
onFetchCategories: (type?: import('../types').CategoryRequestType) => Promise<import('../types').CategoryItem[]>;
|
|
26
25
|
onFetchNodesByCategory: (params?: LinkSearchParams) => Promise<import('../types').NodeFetchResult>;
|
|
27
|
-
fetchNodeActions: (node: NodeTypeItem, _options?: FetchNodeActionOptions) => Promise<ActionItem[]>;
|
|
26
|
+
fetchNodeActions: (node: NodeTypeItem, _options?: FetchNodeActionOptions) => Promise<import('../types').ActionItem[]>;
|
|
28
27
|
};
|
|
29
28
|
export {};
|
package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNavigation.d.ts
CHANGED
|
@@ -10,8 +10,13 @@ interface UseNavigationProps {
|
|
|
10
10
|
defaultPageSize?: number;
|
|
11
11
|
flowId?: string;
|
|
12
12
|
useConnectableDataSource?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* 打开序号:每次抽屉打开都会变,用于在「打开事件」上重新取默认分类第一页。
|
|
15
|
+
* 关闭与重新打开发生在同一批处理里时 nodeSelectorVisible 不会翻假,靠它兜住。
|
|
16
|
+
*/
|
|
17
|
+
resetKey?: number;
|
|
13
18
|
}
|
|
14
|
-
export declare const useNavigation: ({ categories, categoriesReady, initialCategory, nodeSelectorVisible, nodeAddInfo, onFetchNodesByCategory, defaultPageSize, flowId, useConnectableDataSource, }: UseNavigationProps) => {
|
|
19
|
+
export declare const useNavigation: ({ categories, categoriesReady, initialCategory, nodeSelectorVisible, nodeAddInfo, onFetchNodesByCategory, defaultPageSize, flowId, useConnectableDataSource, resetKey, }: UseNavigationProps) => {
|
|
15
20
|
categoryNodes: NodeTypeItem[];
|
|
16
21
|
currentCategory: CategoryItem;
|
|
17
22
|
isLoadingNodes: boolean;
|
|
@@ -21,6 +26,7 @@ export declare const useNavigation: ({ categories, categoriesReady, initialCateg
|
|
|
21
26
|
isBuiltinMCPMode: boolean;
|
|
22
27
|
navigateToCategory: (categoryId: string) => Promise<void>;
|
|
23
28
|
loadMoreNodes: () => Promise<void>;
|
|
29
|
+
reloadNodes: () => Promise<void>;
|
|
24
30
|
resetNavigation: () => void;
|
|
25
31
|
pagination: {
|
|
26
32
|
page: number;
|
|
@@ -30,5 +36,6 @@ export declare const useNavigation: ({ categories, categoriesReady, initialCateg
|
|
|
30
36
|
};
|
|
31
37
|
activeCategoryId: string;
|
|
32
38
|
setActiveCategoryId: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
39
|
+
error: Error;
|
|
33
40
|
};
|
|
34
41
|
export {};
|
package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useSearch.d.ts
CHANGED
|
@@ -8,17 +8,24 @@ interface UseSearchProps {
|
|
|
8
8
|
}>;
|
|
9
9
|
}
|
|
10
10
|
type SearchOptions = LinkSearchParams;
|
|
11
|
+
interface SearchMeta {
|
|
12
|
+
total: number;
|
|
13
|
+
page: number;
|
|
14
|
+
size: number;
|
|
15
|
+
}
|
|
11
16
|
export declare const useSearch: ({ onSearch }: UseSearchProps) => {
|
|
12
17
|
searchText: string;
|
|
13
18
|
searchResults: NodeTypeItem[];
|
|
14
19
|
isSearching: boolean;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
+
isLoadingMore: boolean;
|
|
21
|
+
/** 是否还有下一页:后端 `total` 是全量命中数,按每页条数推算。 */
|
|
22
|
+
hasMore: boolean;
|
|
23
|
+
searchMeta: SearchMeta;
|
|
20
24
|
handleSearch: (value: string, options?: SearchOptions) => Promise<void>;
|
|
25
|
+
beginSearch: (value: string) => void;
|
|
26
|
+
loadMore: () => Promise<void>;
|
|
21
27
|
clearSearch: () => void;
|
|
22
28
|
setSearchText: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
29
|
+
error: Error;
|
|
23
30
|
};
|
|
24
31
|
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 节点选择面板界面文案 key。
|
|
3
|
+
*
|
|
4
|
+
* 文案本体位于 src/lib/locales/<locale>/link/nodeSelector.ts,
|
|
5
|
+
* 这里集中收敛 id,避免各组件散落硬编码字符串。
|
|
6
|
+
*/
|
|
7
|
+
export declare const NODE_SELECTOR_MESSAGE_IDS: {
|
|
8
|
+
readonly allCategories: "link.flow.nodeSelector.all_categories";
|
|
9
|
+
readonly allActions: "link.flow.nodeSelector.all_actions";
|
|
10
|
+
readonly backToSearch: "link.flow.nodeSelector.back_to_search";
|
|
11
|
+
readonly backToCatalog: "link.flow.nodeSelector.back_to_catalog";
|
|
12
|
+
readonly closeDetail: "link.flow.nodeSelector.close_detail";
|
|
13
|
+
readonly closePanel: "link.flow.nodeSelector.close_panel";
|
|
14
|
+
readonly searchInApp: "link.flow.nodeSelector.search_in_app";
|
|
15
|
+
readonly loadingActions: "link.flow.nodeSelector.loading_actions";
|
|
16
|
+
readonly noActions: "link.flow.nodeSelector.no_actions";
|
|
17
|
+
readonly noMatchedActions: "link.flow.nodeSelector.no_matched_actions";
|
|
18
|
+
readonly categoryEmptyTitle: "link.flow.nodeSelector.empty_title";
|
|
19
|
+
readonly categoryEmptyDescription: "link.flow.nodeSelector.empty_description";
|
|
20
|
+
/** 已在「全部分类」下搜索时使用:此时没有「搜索全部分类」可引导,不能再提该入口。 */
|
|
21
|
+
readonly categoryEmptyDescriptionAllCategories: "link.flow.nodeSelector.empty_description_all_categories";
|
|
22
|
+
readonly categoryEmptyHint: "link.flow.nodeSelector.empty_hint";
|
|
23
|
+
readonly searchAllCategories: "link.flow.nodeSelector.search_all";
|
|
24
|
+
readonly categoryEmptyExample: "link.flow.nodeSelector.empty_example";
|
|
25
|
+
readonly loadFailed: "link.flow.nodeSelector.load_failed";
|
|
26
|
+
readonly loadMoreFailed: "link.flow.nodeSelector.load_more_failed";
|
|
27
|
+
readonly reload: "link.flow.nodeSelector.reload";
|
|
28
|
+
readonly panelTitleMcpServer: "link.flow.nodeSelector.panel_title_mcp_server";
|
|
29
|
+
readonly panelTitleMcpTool: "link.flow.nodeSelector.panel_title_mcp_tool";
|
|
30
|
+
readonly panelTitleModel: "link.flow.nodeSelector.panel_title_model";
|
|
31
|
+
readonly panelTitleAction: "link.flow.nodeSelector.panel_title_action";
|
|
32
|
+
readonly searchPlaceholderModel: "link.flow.nodeSelector.search_placeholder_model";
|
|
33
|
+
readonly searchPlaceholderMcpServer: "link.flow.nodeSelector.search_placeholder_mcp_server";
|
|
34
|
+
readonly searchPlaceholderMcpTool: "link.flow.nodeSelector.search_placeholder_mcp_tool";
|
|
35
|
+
readonly searchPlaceholderDefault: "link.flow.nodeSelector.search_placeholder_default";
|
|
36
|
+
readonly noMatchingNodes: "link.flow.nodeSelector.no_matching_nodes";
|
|
37
|
+
readonly loadingMore: "link.flow.nodeSelector.loading_more";
|
|
38
|
+
readonly allLoaded: "link.flow.nodeSelector.all_loaded";
|
|
39
|
+
readonly insertBetween: "link.flow.nodeSelector.insert_between";
|
|
40
|
+
readonly insertAbove: "link.flow.nodeSelector.insert_above";
|
|
41
|
+
readonly insertLeft: "link.flow.nodeSelector.insert_left";
|
|
42
|
+
readonly insertRight: "link.flow.nodeSelector.insert_right";
|
|
43
|
+
readonly insertAfter: "link.flow.nodeSelector.insert_after";
|
|
44
|
+
readonly insertBelow: "link.flow.nodeSelector.insert_below";
|
|
45
|
+
readonly insertBefore: "link.flow.nodeSelector.insert_before";
|
|
46
|
+
readonly addAction: "link.flow.nodeSelector.add_action";
|
|
47
|
+
};
|
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
import { NodeType } from '../types/Node';
|
|
2
|
-
import {
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
type NodeHoverHandlersOptions = {
|
|
6
|
-
/**
|
|
7
|
-
* 受控画布的 React state 写入器(useNodesState 的 setNodes)。
|
|
8
|
-
* hover 等改动必须写受控 state:直写 RF store 会被 StoreUpdater 在下一次
|
|
9
|
-
* 同步时覆盖,且与 store 快照互写会放大选中态的代际差(双选中 bug 根因之一)。
|
|
10
|
-
*/
|
|
11
|
-
setNodes: SetNodesFn;
|
|
12
|
-
};
|
|
13
|
-
/** 节点 hover 高亮:写受控 React state,不直写 RF store。 */
|
|
14
|
-
export declare const useNodeHoverHandlers: ({ setNodes }: NodeHoverHandlersOptions) => {
|
|
2
|
+
import { NodeMouseHandler } from '@xyflow/react';
|
|
3
|
+
/** 节点 hover 高亮:写入画布共享的 hover 槽(node/edge 互斥),不写节点数据。 */
|
|
4
|
+
export declare const useNodeHoverHandlers: () => {
|
|
15
5
|
onNodeMouseEnter: NodeMouseHandler;
|
|
16
6
|
onNodeMouseLeave: NodeMouseHandler;
|
|
17
7
|
};
|
|
18
8
|
export declare const useNodesInteraction: () => {
|
|
19
9
|
handleNodesDelete: (nodeIds: string[], nodeType: NodeType) => void;
|
|
20
10
|
};
|
|
21
|
-
export {};
|
|
@@ -4,6 +4,7 @@ export type { NodeAddInfo } from '../types/NodeAddContext';
|
|
|
4
4
|
export declare function usePanel(): {
|
|
5
5
|
nodeSelectorVisible: boolean;
|
|
6
6
|
nodeAddInfo: NodeAddInfo;
|
|
7
|
+
openSeq: number;
|
|
7
8
|
openNodeSelector: (info: NodeAddInfo) => void;
|
|
8
9
|
closeNodeSelector: () => void;
|
|
9
10
|
handleNodeSelect: (nodeType: ActionItem) => void;
|
|
@@ -6,6 +6,14 @@ export interface UseWorkflowOptions {
|
|
|
6
6
|
initialNodes?: Node<NodeData>[];
|
|
7
7
|
initialEdges?: Edge<EdgeData>[];
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* 节点配置弹窗可见性:每个节点组件都会调用,单独窄订阅。
|
|
11
|
+
* 走完整 useWorkflow 会让每个节点在任意 slice 变更时都做 8 次 selector 检查。
|
|
12
|
+
*/
|
|
13
|
+
export declare function useNodeConfigVisibility(): {
|
|
14
|
+
currentNodeConfigVisibleId: string;
|
|
15
|
+
setNodeConfigVisible: (nodeId: string | null) => void;
|
|
16
|
+
};
|
|
9
17
|
export declare function useWorkflow(id?: string): {
|
|
10
18
|
nodes: Node<NodeData>[];
|
|
11
19
|
edges: Edge<EdgeData>[];
|
|
@@ -6,6 +6,12 @@ export interface PanelState {
|
|
|
6
6
|
nodeSelectorVisible: boolean;
|
|
7
7
|
nodeAddInfo: NodeAddInfo | null;
|
|
8
8
|
nodeAddCallback: NodeAddCallback;
|
|
9
|
+
/**
|
|
10
|
+
* 打开次数,每次 openNodeSelector 递增。
|
|
11
|
+
* 面板据此在「打开」这个事件上重置内部状态:关闭与重新打开若发生在同一批处理里,
|
|
12
|
+
* nodeSelectorVisible 的中间态 false 根本不会渲染,按它翻假做清理会漏掉。
|
|
13
|
+
*/
|
|
14
|
+
openSeq: number;
|
|
9
15
|
}
|
|
10
16
|
export declare const panelSlice: import('@reduxjs/toolkit').Slice<PanelState, {
|
|
11
17
|
openNodeSelector: (state: {
|
|
@@ -61,11 +67,13 @@ export declare const panelSlice: import('@reduxjs/toolkit').Slice<PanelState, {
|
|
|
61
67
|
height?: number;
|
|
62
68
|
};
|
|
63
69
|
};
|
|
70
|
+
anchorPosition?: "top" | "bottom" | "left" | "right";
|
|
64
71
|
trigger?: boolean;
|
|
65
72
|
protocol?: string;
|
|
66
73
|
refresh?: boolean;
|
|
67
74
|
};
|
|
68
75
|
nodeAddCallback: NodeAddCallback;
|
|
76
|
+
openSeq: number;
|
|
69
77
|
}, action: PayloadAction<NodeAddInfo>) => void;
|
|
70
78
|
closeNodeSelector: (state: {
|
|
71
79
|
nodeSelectorVisible: boolean;
|
|
@@ -120,11 +128,13 @@ export declare const panelSlice: import('@reduxjs/toolkit').Slice<PanelState, {
|
|
|
120
128
|
height?: number;
|
|
121
129
|
};
|
|
122
130
|
};
|
|
131
|
+
anchorPosition?: "top" | "bottom" | "left" | "right";
|
|
123
132
|
trigger?: boolean;
|
|
124
133
|
protocol?: string;
|
|
125
134
|
refresh?: boolean;
|
|
126
135
|
};
|
|
127
136
|
nodeAddCallback: NodeAddCallback;
|
|
137
|
+
openSeq: number;
|
|
128
138
|
}) => void;
|
|
129
139
|
setNodeAddCallback: (state: {
|
|
130
140
|
nodeSelectorVisible: boolean;
|
|
@@ -179,11 +189,13 @@ export declare const panelSlice: import('@reduxjs/toolkit').Slice<PanelState, {
|
|
|
179
189
|
height?: number;
|
|
180
190
|
};
|
|
181
191
|
};
|
|
192
|
+
anchorPosition?: "top" | "bottom" | "left" | "right";
|
|
182
193
|
trigger?: boolean;
|
|
183
194
|
protocol?: string;
|
|
184
195
|
refresh?: boolean;
|
|
185
196
|
};
|
|
186
197
|
nodeAddCallback: NodeAddCallback;
|
|
198
|
+
openSeq: number;
|
|
187
199
|
}, action: PayloadAction<NodeAddCallback>) => void;
|
|
188
200
|
executeNodeAddCallback: (state: {
|
|
189
201
|
nodeSelectorVisible: boolean;
|
|
@@ -238,11 +250,13 @@ export declare const panelSlice: import('@reduxjs/toolkit').Slice<PanelState, {
|
|
|
238
250
|
height?: number;
|
|
239
251
|
};
|
|
240
252
|
};
|
|
253
|
+
anchorPosition?: "top" | "bottom" | "left" | "right";
|
|
241
254
|
trigger?: boolean;
|
|
242
255
|
protocol?: string;
|
|
243
256
|
refresh?: boolean;
|
|
244
257
|
};
|
|
245
258
|
nodeAddCallback: NodeAddCallback;
|
|
259
|
+
openSeq: number;
|
|
246
260
|
}, action: PayloadAction<NodeTypeItem>) => void;
|
|
247
261
|
}, "panel", "panel", import('@reduxjs/toolkit').SliceSelectors<PanelState>>;
|
|
248
262
|
export declare const openNodeSelector: import('@reduxjs/toolkit').ActionCreatorWithNonInferrablePayload<"panel/openNodeSelector">, closeNodeSelector: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"panel/closeNodeSelector">, setNodeAddCallback: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<(info: NodeAddInfo, nodeType: ActionItem) => void, "panel/setNodeAddCallback">, executeNodeAddCallback: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<NodeTypeItem, "panel/executeNodeAddCallback">;
|
|
@@ -10,6 +10,11 @@ export interface ExecutionControlState {
|
|
|
10
10
|
max_node_executions: number;
|
|
11
11
|
webhook_url?: string;
|
|
12
12
|
}
|
|
13
|
+
/** 指针当前指向的画布实体;node 与 edge 共用一个槽,天然互斥。 */
|
|
14
|
+
export type HoveredEntity = {
|
|
15
|
+
kind: 'node' | 'edge';
|
|
16
|
+
id: string;
|
|
17
|
+
};
|
|
13
18
|
export interface WorkflowState {
|
|
14
19
|
nodes: Node<NodeData>[];
|
|
15
20
|
edges: Edge<EdgeData>[];
|
|
@@ -24,6 +29,7 @@ export interface WorkflowState {
|
|
|
24
29
|
isLocked: boolean;
|
|
25
30
|
executionControl: ExecutionControlState | null;
|
|
26
31
|
flowMetadata: Record<string, unknown>;
|
|
32
|
+
hoveredEntity: HoveredEntity | null;
|
|
27
33
|
}
|
|
28
34
|
export declare const setWorkflowId: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<string, "workflow/setWorkflowId">, setWorkflowName: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<string, "workflow/setWorkflowName">, applyNodesChanges: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<NodeChange[], "workflow/applyNodesChanges">, applyEdgesChanges: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<EdgeChange[], "workflow/applyEdgesChanges">, addConnection: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<Connection, "workflow/addConnection">, addNode: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<{
|
|
29
35
|
type: NodeType;
|
|
@@ -41,6 +47,6 @@ export declare const setWorkflowId: import('@reduxjs/toolkit').ActionCreatorWith
|
|
|
41
47
|
}, "workflow/updateEdge">, setNodes: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<Node<NodeData>[], "workflow/setNodes">, setEdges: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<Edge<EdgeData>[], "workflow/setEdges">, updateNode: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<{
|
|
42
48
|
id: string;
|
|
43
49
|
data: Partial<NodeData>;
|
|
44
|
-
}, "workflow/updateNode">, setFlowOpStatus: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<FlowStatus, "workflow/setFlowOpStatus">, refreshFlow: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/refreshFlow">, setCurrentNodeConfigVisibleId: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<string, "workflow/setCurrentNodeConfigVisibleId">, setLocked: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<boolean, "workflow/setLocked">, setExecutionControl: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<ExecutionControlState, "workflow/setExecutionControl">, setFlowMetadata: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<Record<string, unknown>, "workflow/setFlowMetadata">, resetFlow: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/resetFlow">, executeAutoSave: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/executeAutoSave">, setFlowVersionMeta: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<FlowVersionStatusVO, "workflow/setFlowVersionMeta">;
|
|
50
|
+
}, "workflow/updateNode">, setFlowOpStatus: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<FlowStatus, "workflow/setFlowOpStatus">, refreshFlow: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/refreshFlow">, setCurrentNodeConfigVisibleId: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<string, "workflow/setCurrentNodeConfigVisibleId">, setLocked: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<boolean, "workflow/setLocked">, setExecutionControl: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<ExecutionControlState, "workflow/setExecutionControl">, setFlowMetadata: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<Record<string, unknown>, "workflow/setFlowMetadata">, resetFlow: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/resetFlow">, executeAutoSave: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/executeAutoSave">, setFlowVersionMeta: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<FlowVersionStatusVO, "workflow/setFlowVersionMeta">, setHoveredEntity: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<HoveredEntity, "workflow/setHoveredEntity">, clearHoveredEntity: import('@reduxjs/toolkit').ActionCreatorWithOptionalPayload<HoveredEntity, "workflow/clearHoveredEntity">, resetHoveredEntity: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"workflow/resetHoveredEntity">;
|
|
45
51
|
declare const _default: import('@reduxjs/toolkit').Reducer<WorkflowState>;
|
|
46
52
|
export default _default;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Edge as ReactFlowEdge } from '@xyflow/react';
|
|
2
1
|
import { EdgeType } from '../enums/edge';
|
|
2
|
+
import { Edge as ReactFlowEdge } from '@xyflow/react';
|
|
3
3
|
export interface EdgeData extends Record<string, unknown> {
|
|
4
4
|
label?: string;
|
|
5
5
|
type?: EdgeType;
|
|
6
|
-
isHovered?: boolean;
|
|
7
6
|
}
|
|
8
7
|
export interface WorkflowEdge extends ReactFlowEdge<EdgeData> {
|
|
9
8
|
type?: string;
|
|
@@ -25,6 +25,8 @@ export interface NodeAddInfo {
|
|
|
25
25
|
edge?: NodeAddEdgeContext;
|
|
26
26
|
sourceNode?: NodeAddAnchorNode;
|
|
27
27
|
targetNode?: NodeAddAnchorNode;
|
|
28
|
+
/** 锚点连接桩的布局方位(画布上下左右),用于节点选择器展示插入位置提示。 */
|
|
29
|
+
anchorPosition?: 'top' | 'bottom' | 'left' | 'right';
|
|
28
30
|
trigger?: boolean;
|
|
29
31
|
protocol?: string;
|
|
30
32
|
refresh?: boolean;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { NodeProtocol } from '../types/NodeProtocol';
|
|
2
2
|
export declare const MCP_TRIGGER_CATEGORY = "MCP_TRIGGER";
|
|
3
3
|
export declare const MCP_CATEGORY_TYPE = "mcp_trigger";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* MCP 目录一次拉取的节点包数量。
|
|
6
|
+
* 后端 `QueryPage.MAX_PAGE_SIZE` 是 100,超过会被重置为默认值 50(不是夹到 100),
|
|
7
|
+
* 所以这里取上限 100,不能写 200。
|
|
8
|
+
*/
|
|
9
|
+
export declare const MCP_CATALOG_PAGE_SIZE = 100;
|
|
5
10
|
export declare const MCP_ACTION_PAGE_SIZE = 10;
|
|
6
11
|
export declare const MCP_SERVER_PROTOCOL = NodeProtocol.MCP_SERVER;
|
|
7
12
|
export declare const MCP_SERVER_ACTION_KEY = "dip.core.trigger.mcp-server";
|
|
@@ -23,6 +23,11 @@ export declare function createConditionProperty(query: string, operator: string,
|
|
|
23
23
|
* @returns 更新后的节点对象
|
|
24
24
|
*/
|
|
25
25
|
export declare function addBackendProperties(node: Node<NodeData>, nodeType: string, connectorId?: string, fieldId?: string, actionId?: string, properties?: any): Node<NodeData>;
|
|
26
|
+
/**
|
|
27
|
+
* 剥离旧版本写入业务数据的 hover 标记;hover 现由画布 hover 槽维护。
|
|
28
|
+
* 数据边界统一清理,避免旧流程里的 isHovered 随导出 / 保存再次落库。
|
|
29
|
+
*/
|
|
30
|
+
export declare function stripLegacyHover<T>(data: T): T;
|
|
26
31
|
/**
|
|
27
32
|
* 将前端节点转换为后端API所需的格式
|
|
28
33
|
* @param nodes 前端节点数组
|
|
@@ -3,6 +3,8 @@ import { TranslateFn } from '../../../../locales';
|
|
|
3
3
|
/** 供选择器、自动连线和已有边检查复用的 connectable 界面文案。 */
|
|
4
4
|
export declare const CONNECTABLE_UI_MESSAGE_IDS: {
|
|
5
5
|
readonly categoryUnavailable: "link.flow.connectable.category_unavailable";
|
|
6
|
+
readonly browseApps: "link.flow.connectable.browse_apps";
|
|
7
|
+
readonly searchResultApps: "link.flow.connectable.search_result_apps";
|
|
6
8
|
readonly connectorUnavailable: "link.flow.connectable.connector_unavailable";
|
|
7
9
|
readonly actionUnavailable: "link.flow.connectable.action_unavailable";
|
|
8
10
|
readonly loadFailed: "link.flow.connectable.load_failed";
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Node } from '@xyflow/react';
|
|
2
|
-
type TriggerCandidate = Pick<Node, 'type'> & Partial<Pick<Node, 'data'>>;
|
|
2
|
+
type TriggerCandidate = Pick<Node, 'type' | 'id'> & Partial<Pick<Node, 'data'>>;
|
|
3
|
+
/** 当前画布 trigger 节点信息;一个画布最多一个 trigger,记录它即可推导画布级状态。 */
|
|
4
|
+
export interface TriggerNodeInfo {
|
|
5
|
+
/** trigger 节点 id */
|
|
6
|
+
id: string;
|
|
7
|
+
/** 是否为 MCP Server 触发画布(trigger 节点的 action_key 指向 MCP Server) */
|
|
8
|
+
isMcpServer: boolean;
|
|
9
|
+
}
|
|
3
10
|
/**
|
|
4
11
|
* 判断节点是否为 Trigger 节点。
|
|
5
12
|
*
|
|
@@ -10,4 +17,11 @@ type TriggerCandidate = Pick<Node, 'type'> & Partial<Pick<Node, 'data'>>;
|
|
|
10
17
|
* 一个画布最多只有一个 trigger 节点,因此画布级推导只需记录该节点信息即可。
|
|
11
18
|
*/
|
|
12
19
|
export declare const isTriggerNode: (node?: TriggerCandidate | null) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 从节点列表解析画布级 trigger 信息。
|
|
22
|
+
*
|
|
23
|
+
* 一个画布最多只有一个 trigger,因此找到第一个即可;`null` 表示当前画布没有 trigger。
|
|
24
|
+
* 抽成纯函数便于覆盖“新增/删除 trigger 后画布状态”的回归用例。
|
|
25
|
+
*/
|
|
26
|
+
export declare const findTriggerNodeInfo: (nodes: readonly TriggerCandidate[]) => TriggerNodeInfo | null;
|
|
13
27
|
export {};
|
|
@@ -42,6 +42,9 @@ export type FieldRendererProps = {
|
|
|
42
42
|
* 2. 从注册表获取字段组件
|
|
43
43
|
* 3. 根据组件元数据决定如何包装 Form.Item
|
|
44
44
|
*
|
|
45
|
+
* 同时通过 Context 将自身下发给字段组件,
|
|
46
|
+
* 供 ObjectField 等复杂字段递归渲染子字段(见 useNestedFieldRenderer)。
|
|
47
|
+
*
|
|
45
48
|
* @example
|
|
46
49
|
* <FieldRenderer
|
|
47
50
|
* field={{ type: 'TEXT', name: 'username', label: '用户名' }}
|