@agentscope-ai/flow 0.0.1

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.
Files changed (176) hide show
  1. package/README.zh-CN.md +67 -0
  2. package/dist/components/base-node/index.d.ts +27 -0
  3. package/dist/components/base-node/index.js +320 -0
  4. package/dist/components/base-node/index.less +258 -0
  5. package/dist/components/branch-title-header/index.d.ts +12 -0
  6. package/dist/components/branch-title-header/index.js +176 -0
  7. package/dist/components/branch-title-header/index.less +28 -0
  8. package/dist/components/check-list-btn/index.d.ts +4 -0
  9. package/dist/components/check-list-btn/index.js +144 -0
  10. package/dist/components/check-list-btn/index.less +113 -0
  11. package/dist/components/code-input/index.d.ts +24 -0
  12. package/dist/components/code-input/index.js +356 -0
  13. package/dist/components/code-input/index.less +87 -0
  14. package/dist/components/condition-item/index.d.ts +13 -0
  15. package/dist/components/condition-item/index.js +185 -0
  16. package/dist/components/condition-item/index.less +23 -0
  17. package/dist/components/custom-connection-line/index.d.ts +4 -0
  18. package/dist/components/custom-connection-line/index.js +28 -0
  19. package/dist/components/custom-handle/source-handle.d.ts +10 -0
  20. package/dist/components/custom-handle/source-handle.js +45 -0
  21. package/dist/components/custom-handle/target-handle.d.ts +6 -0
  22. package/dist/components/custom-handle/target-handle.js +21 -0
  23. package/dist/components/custom-inputs-control/index.d.ts +56 -0
  24. package/dist/components/custom-inputs-control/index.js +366 -0
  25. package/dist/components/custom-inputs-control/index.less +28 -0
  26. package/dist/components/custom-outputs-form/index.d.ts +24 -0
  27. package/dist/components/custom-outputs-form/index.js +346 -0
  28. package/dist/components/custom-outputs-form/index.less +51 -0
  29. package/dist/components/drag-panel/index.d.ts +10 -0
  30. package/dist/components/drag-panel/index.js +79 -0
  31. package/dist/components/drag-panel/index.less +23 -0
  32. package/dist/components/draggable-with-handle/index.d.ts +13 -0
  33. package/dist/components/draggable-with-handle/index.js +81 -0
  34. package/dist/components/draggable-with-handle/index.less +23 -0
  35. package/dist/components/flow-aside/index.d.ts +4 -0
  36. package/dist/components/flow-aside/index.js +62 -0
  37. package/dist/components/flow-aside/index.less +84 -0
  38. package/dist/components/flow-base-edge/index.d.ts +5 -0
  39. package/dist/components/flow-base-edge/index.js +226 -0
  40. package/dist/components/flow-base-edge/index.less +28 -0
  41. package/dist/components/flow-base-edge/linear-gradient-svg.d.ts +21 -0
  42. package/dist/components/flow-base-edge/linear-gradient-svg.js +32 -0
  43. package/dist/components/flow-icon/index.d.ts +9 -0
  44. package/dist/components/flow-icon/index.js +30 -0
  45. package/dist/components/flow-icon/index.less +20 -0
  46. package/dist/components/flow-mini-map/index.d.ts +4 -0
  47. package/dist/components/flow-mini-map/index.js +26 -0
  48. package/dist/components/flow-mini-map/index.less +22 -0
  49. package/dist/components/flow-panel/config-panel.d.ts +15 -0
  50. package/dist/components/flow-panel/config-panel.js +303 -0
  51. package/dist/components/flow-panel/index.d.ts +7 -0
  52. package/dist/components/flow-panel/index.js +7 -0
  53. package/dist/components/flow-panel/index.less +85 -0
  54. package/dist/components/flow-panel/panel-container.d.ts +12 -0
  55. package/dist/components/flow-panel/panel-container.js +25 -0
  56. package/dist/components/flow-tools/add-node-btn.d.ts +3 -0
  57. package/dist/components/flow-tools/add-node-btn.js +26 -0
  58. package/dist/components/flow-tools/history-btn.d.ts +3 -0
  59. package/dist/components/flow-tools/history-btn.js +59 -0
  60. package/dist/components/flow-tools/index.d.ts +4 -0
  61. package/dist/components/flow-tools/index.js +29 -0
  62. package/dist/components/flow-tools/index.less +82 -0
  63. package/dist/components/flow-tools/layout-btn.d.ts +3 -0
  64. package/dist/components/flow-tools/layout-btn.js +27 -0
  65. package/dist/components/flow-tools/mini-map-btn.d.ts +3 -0
  66. package/dist/components/flow-tools/mini-map-btn.js +32 -0
  67. package/dist/components/flow-tools/scale-btn.d.ts +3 -0
  68. package/dist/components/flow-tools/scale-btn.js +101 -0
  69. package/dist/components/flow-tools/short-key-btn.d.ts +3 -0
  70. package/dist/components/flow-tools/short-key-btn.js +38 -0
  71. package/dist/components/flow-tools/short-key-content.d.ts +4 -0
  72. package/dist/components/flow-tools/short-key-content.js +153 -0
  73. package/dist/components/flow-tools/short-key-content.less +38 -0
  74. package/dist/components/flow-tools/touch-mode-btn.d.ts +3 -0
  75. package/dist/components/flow-tools/touch-mode-btn.js +89 -0
  76. package/dist/components/input-text-area/index.d.ts +16 -0
  77. package/dist/components/input-text-area/index.js +74 -0
  78. package/dist/components/input-text-area/index.less +30 -0
  79. package/dist/components/judge-form/index.d.ts +13 -0
  80. package/dist/components/judge-form/index.js +182 -0
  81. package/dist/components/judge-form/index.less +11 -0
  82. package/dist/components/node-menu/index.d.ts +35 -0
  83. package/dist/components/node-menu/index.js +266 -0
  84. package/dist/components/node-menu/index.less +79 -0
  85. package/dist/components/node-resizer/index.d.ts +11 -0
  86. package/dist/components/node-resizer/index.js +46 -0
  87. package/dist/components/node-resizer/index.less +12 -0
  88. package/dist/components/node-result-panel/index.d.ts +9 -0
  89. package/dist/components/node-result-panel/index.js +155 -0
  90. package/dist/components/node-result-panel/index.less +132 -0
  91. package/dist/components/node-tree/index.d.ts +4 -0
  92. package/dist/components/node-tree/index.js +213 -0
  93. package/dist/components/node-tree/index.less +51 -0
  94. package/dist/components/output-params-tree/index.d.ts +10 -0
  95. package/dist/components/output-params-tree/index.js +34 -0
  96. package/dist/components/output-params-tree/index.less +27 -0
  97. package/dist/components/script-code-mirror/index.d.ts +14 -0
  98. package/dist/components/script-code-mirror/index.js +162 -0
  99. package/dist/components/script-code-mirror/index.less +11 -0
  100. package/dist/components/script-edit-modal/index.d.ts +30 -0
  101. package/dist/components/script-edit-modal/index.js +84 -0
  102. package/dist/components/script-edit-modal/index.less +24 -0
  103. package/dist/components/select-with-desc/index.d.ts +5 -0
  104. package/dist/components/select-with-desc/index.js +20 -0
  105. package/dist/components/select-with-desc/index.less +11 -0
  106. package/dist/components/task-status/index.d.ts +4 -0
  107. package/dist/components/task-status/index.js +209 -0
  108. package/dist/components/task-status/index.less +65 -0
  109. package/dist/components/var-input-text-area/index.d.ts +17 -0
  110. package/dist/components/var-input-text-area/index.js +211 -0
  111. package/dist/components/var-input-text-area/index.less +64 -0
  112. package/dist/components/var-type-prefix/index.d.ts +17 -0
  113. package/dist/components/var-type-prefix/index.js +21 -0
  114. package/dist/components/variable-input/index.d.ts +24 -0
  115. package/dist/components/variable-input/index.js +163 -0
  116. package/dist/components/variable-input/index.less +13 -0
  117. package/dist/components/variable-tree-select/index.d.ts +33 -0
  118. package/dist/components/variable-tree-select/index.js +160 -0
  119. package/dist/components/variable-tree-select/index.less +61 -0
  120. package/dist/constant/index.d.ts +61 -0
  121. package/dist/constant/index.js +515 -0
  122. package/dist/flow/animate.css +5 -0
  123. package/dist/flow/context.d.ts +12 -0
  124. package/dist/flow/context.js +44 -0
  125. package/dist/flow/index.d.ts +13 -0
  126. package/dist/flow/index.js +162 -0
  127. package/dist/flow/index.less +72 -0
  128. package/dist/hooks/index.d.ts +10 -0
  129. package/dist/hooks/index.js +10 -0
  130. package/dist/hooks/use-edges-interaction.d.ts +11 -0
  131. package/dist/hooks/use-edges-interaction.js +125 -0
  132. package/dist/hooks/use-flow-debug-interaction.d.ts +5 -0
  133. package/dist/hooks/use-flow-debug-interaction.js +23 -0
  134. package/dist/hooks/use-flow-interaction.d.ts +12 -0
  135. package/dist/hooks/use-flow-interaction.js +173 -0
  136. package/dist/hooks/use-flow-key-press.d.ts +1 -0
  137. package/dist/hooks/use-flow-key-press.js +32 -0
  138. package/dist/hooks/use-flow-save.d.ts +5 -0
  139. package/dist/hooks/use-flow-save.js +47 -0
  140. package/dist/hooks/use-flow-view-port.d.ts +7 -0
  141. package/dist/hooks/use-flow-view-port.js +46 -0
  142. package/dist/hooks/use-history.d.ts +21 -0
  143. package/dist/hooks/use-history.js +80 -0
  144. package/dist/hooks/use-nodes-interaction.d.ts +34 -0
  145. package/dist/hooks/use-nodes-interaction.js +777 -0
  146. package/dist/hooks/use-nodes-output-params.d.ts +31 -0
  147. package/dist/hooks/use-nodes-output-params.js +300 -0
  148. package/dist/hooks/use-nodes-update.d.ts +9 -0
  149. package/dist/hooks/use-nodes-update.js +38 -0
  150. package/dist/hooks/use-work-flow.d.ts +4 -0
  151. package/dist/hooks/use-work-flow.js +21 -0
  152. package/dist/i18n/i18n.d.ts +62 -0
  153. package/dist/i18n/i18n.js +111 -0
  154. package/dist/i18n/index.d.ts +3 -0
  155. package/dist/i18n/index.js +12 -0
  156. package/dist/i18n/locales/en-us.json +327 -0
  157. package/dist/i18n/locales/ja-jp.json +300 -0
  158. package/dist/i18n/locales/zh-cn.json +327 -0
  159. package/dist/index.css +1 -0
  160. package/dist/index.d.ts +47 -0
  161. package/dist/index.js +47 -0
  162. package/dist/index.less +1 -0
  163. package/dist/store/index.d.ts +70 -0
  164. package/dist/store/index.js +146 -0
  165. package/dist/tailwind.css +28 -0
  166. package/dist/types/work-flow.d.ts +188 -0
  167. package/dist/types/work-flow.js +1 -0
  168. package/dist/utils/default-values.d.ts +2 -0
  169. package/dist/utils/default-values.js +16 -0
  170. package/dist/utils/index.d.ts +39 -0
  171. package/dist/utils/index.js +273 -0
  172. package/dist/utils/unique-id.d.ts +2 -0
  173. package/dist/utils/unique-id.js +39 -0
  174. package/dist/utils/work-flow.d.ts +17 -0
  175. package/dist/utils/work-flow.js +44 -0
  176. package/package.json +78 -0
@@ -0,0 +1,303 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { useStore } from "../../flow/context";
8
+ import { useNodeDataUpdate, useNodesInteraction, useNodesReadOnly } from "../../hooks";
9
+ import $i18n from "../../i18n";
10
+ import { copy, Dropdown, Empty, IconButton, Input, Tag } from '@agentscope-ai/design';
11
+ import { SparkCirclePlayLine, SparkCopyLine, SparkDeleteLine, SparkEditLine, SparkFalseLine, SparkIdLine, SparkMoreLine, SparkTrueLine } from '@agentscope-ai/icons';
12
+ import { useNodes } from '@xyflow/react';
13
+ import { useSetState } from 'ahooks';
14
+ import { Divider, Flex, message, Tooltip, Typography } from 'antd';
15
+ import { compact } from 'lodash-es';
16
+ import React, { memo, useCallback, useEffect, useMemo, useRef } from 'react';
17
+ import DragPanel from "../drag-panel";
18
+ import FlowIcon from "../flow-icon";
19
+ import PanelContainer from "./panel-container";
20
+ export var ConfigPanel = /*#__PURE__*/memo(function (_ref) {
21
+ var _slots$configPanelRen;
22
+ var selectedNode = _ref.selectedNode,
23
+ singleTestPanel = _ref.singleTestPanel;
24
+ var nodes = useNodes();
25
+ var setSelectedNode = useStore(function (state) {
26
+ return state.setSelectedNode;
27
+ });
28
+ var slots = useStore(function (state) {
29
+ return state.slots;
30
+ });
31
+ var showSingleTest = useStore(function (state) {
32
+ return state.showSingleTest;
33
+ });
34
+ var setShowSingleTest = useStore(function (state) {
35
+ return state.setShowSingleTest;
36
+ });
37
+ var _useNodeDataUpdate = useNodeDataUpdate(),
38
+ handleNodeDataUpdate = _useNodeDataUpdate.handleNodeDataUpdate;
39
+ var _useNodesInteraction = useNodesInteraction(),
40
+ onNodeCopy = _useNodesInteraction.onNodeCopy,
41
+ onNodeDelete = _useNodesInteraction.onNodeDelete;
42
+ var nodeSchemaMap = useStore(function (state) {
43
+ return state.nodeSchemaMap;
44
+ });
45
+ var _useNodesReadOnly = useNodesReadOnly(),
46
+ nodesReadOnly = _useNodesReadOnly.nodesReadOnly;
47
+ var _useSetState = useSetState({
48
+ tempName: '',
49
+ isEditing: false
50
+ }),
51
+ _useSetState2 = _slicedToArray(_useSetState, 2),
52
+ state = _useSetState2[0],
53
+ setState = _useSetState2[1];
54
+ var textAreaRef = useRef(null);
55
+ var selectedNodeData = useMemo(function () {
56
+ return nodes.find(function (node) {
57
+ return node.id === selectedNode.id;
58
+ });
59
+ }, [nodes, selectedNode.id]);
60
+ var handleClickOperation = useCallback(function (_ref2) {
61
+ var key = _ref2.key;
62
+ if (!selectedNodeData) return;
63
+ switch (key) {
64
+ case 'rename':
65
+ setState({
66
+ isEditing: true,
67
+ tempName: selectedNodeData.data.label
68
+ });
69
+ break;
70
+ case 'copy':
71
+ onNodeCopy(selectedNodeData.id);
72
+ break;
73
+ case 'delete':
74
+ onNodeDelete(selectedNodeData.id);
75
+ break;
76
+ case 'id':
77
+ copy(selectedNode.id);
78
+ message.success($i18n.get({
79
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.copySuccess',
80
+ dm: '复制成功'
81
+ }));
82
+ break;
83
+ }
84
+ }, [selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.id, selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.data.label]);
85
+ useEffect(function () {
86
+ setState({
87
+ isEditing: false
88
+ });
89
+ }, [selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.id]);
90
+ var handleSure = useCallback(function () {
91
+ if (!state.tempName) {
92
+ message.error($i18n.get({
93
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.enterNodeName',
94
+ dm: '请输入节点名称'
95
+ }));
96
+ return;
97
+ }
98
+ if (nodes.some(function (node) {
99
+ return node.data.label === state.tempName && node.id !== (selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.id);
100
+ })) {
101
+ message.error($i18n.get({
102
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.nodeNameExists',
103
+ dm: '节点名称已存在'
104
+ }));
105
+ return;
106
+ }
107
+ setState({
108
+ isEditing: false
109
+ });
110
+ handleNodeDataUpdate({
111
+ id: selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.id,
112
+ data: {
113
+ label: state.tempName
114
+ }
115
+ });
116
+ }, [selectedNodeData, handleNodeDataUpdate, nodes, state.tempName]);
117
+ var nodeInfo = useMemo(function () {
118
+ if (!selectedNodeData) return null;
119
+ return nodeSchemaMap[selectedNodeData.type];
120
+ }, [nodeSchemaMap, selectedNodeData === null || selectedNodeData === void 0 ? void 0 : selectedNodeData.type]);
121
+ var handleBlur = useCallback(function () {
122
+ if (textAreaRef.current && textAreaRef.current.resizableTextArea) {
123
+ var textArea = textAreaRef.current.resizableTextArea.textArea;
124
+ textArea.scrollTo({
125
+ top: 0,
126
+ behavior: 'smooth'
127
+ });
128
+ }
129
+ }, []);
130
+ if (!selectedNodeData) return null;
131
+ var panelContent = ((_slots$configPanelRen = slots.configPanelRenderer) === null || _slots$configPanelRen === void 0 ? void 0 : _slots$configPanelRen.call(slots, selectedNodeData)) || /*#__PURE__*/React.createElement("div", {
132
+ className: "full-center"
133
+ }, /*#__PURE__*/React.createElement(Empty, {
134
+ description: $i18n.get({
135
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.pleaseConfigureFirst',
136
+ dm: '请先配置'
137
+ })
138
+ }));
139
+ return /*#__PURE__*/React.createElement(DragPanel, {
140
+ defaultWidth: 480,
141
+ minWidth: 420,
142
+ maxWidth: 720
143
+ }, /*#__PURE__*/React.createElement(PanelContainer, {
144
+ noPadding: true,
145
+ hiddenRight: state.isEditing,
146
+ headerBottom: /*#__PURE__*/React.createElement(Input.TextArea, {
147
+ ref: textAreaRef,
148
+ value: selectedNodeData.data.desc,
149
+ onChange: function onChange(e) {
150
+ return handleNodeDataUpdate({
151
+ id: selectedNodeData.id,
152
+ data: {
153
+ desc: e.target.value
154
+ }
155
+ });
156
+ },
157
+ onBlur: handleBlur,
158
+ style: {
159
+ padding: 0,
160
+ marginTop: 6
161
+ },
162
+ placeholder: $i18n.get({
163
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.enterDescription',
164
+ dm: '添加描述...'
165
+ }),
166
+ autoSize: {
167
+ minRows: 1,
168
+ maxRows: 2
169
+ },
170
+ variant: "borderless"
171
+ }),
172
+ title: /*#__PURE__*/React.createElement("div", {
173
+ className: "flex gap-[8px] items-center flex-1"
174
+ }, /*#__PURE__*/React.createElement(FlowIcon, {
175
+ nodeType: selectedNodeData.type
176
+ }), state.isEditing ? /*#__PURE__*/React.createElement(Flex, {
177
+ gap: 8,
178
+ align: "center",
179
+ flex: 1
180
+ }, /*#__PURE__*/React.createElement(Input, {
181
+ value: state.tempName,
182
+ onChange: function onChange(e) {
183
+ return setState({
184
+ tempName: e.target.value
185
+ });
186
+ }
187
+ }), /*#__PURE__*/React.createElement(IconButton, {
188
+ className: "size-[32px] flex-shrink-0",
189
+ type: "text",
190
+ onClick: handleSure,
191
+ icon: /*#__PURE__*/React.createElement(SparkTrueLine, null)
192
+ }), /*#__PURE__*/React.createElement(IconButton, {
193
+ onClick: function onClick() {
194
+ return setState({
195
+ isEditing: false
196
+ });
197
+ },
198
+ className: "size-[32px] flex-shrink-0",
199
+ type: "text",
200
+ icon: /*#__PURE__*/React.createElement(SparkFalseLine, null)
201
+ })) : /*#__PURE__*/React.createElement(Typography.Text, {
202
+ ellipsis: {
203
+ tooltip: true
204
+ },
205
+ className: "spark-flow-panel-title flex-1 w-1"
206
+ }, selectedNodeData.data.label || $i18n.get({
207
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.nodeNameConfig',
208
+ dm: '【节点名称】配置'
209
+ }))),
210
+ onClose: function onClose() {
211
+ return setSelectedNode(null);
212
+ },
213
+ right: /*#__PURE__*/React.createElement(React.Fragment, null, singleTestPanel && (nodeInfo === null || nodeInfo === void 0 ? void 0 : nodeInfo.allowSingleTest) && !nodesReadOnly && /*#__PURE__*/React.createElement(Tooltip, {
214
+ title: $i18n.get({
215
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.debug',
216
+ dm: '调试'
217
+ })
218
+ }, /*#__PURE__*/React.createElement("div", {
219
+ onClick: function onClick() {
220
+ return setShowSingleTest(true);
221
+ },
222
+ className: "spark-flow-operator-icon-with-bg rounded-[6px] size-[32px] cursor-pointer flex-center"
223
+ }, /*#__PURE__*/React.createElement(SparkCirclePlayLine, {
224
+ className: "spark-flow-node-action-btn text-[24px]"
225
+ }))), /*#__PURE__*/React.createElement(Dropdown, {
226
+ placement: "bottomRight",
227
+ trigger: ['click'],
228
+ getPopupContainer: function getPopupContainer(ele) {
229
+ return ele;
230
+ },
231
+ overlayClassName: "spark-flow-node-dropdown",
232
+ menu: {
233
+ onClick: handleClickOperation,
234
+ items: compact([!nodesReadOnly && {
235
+ label: /*#__PURE__*/React.createElement("div", {
236
+ className: "flex items-center gap-[8px]"
237
+ }, /*#__PURE__*/React.createElement(SparkEditLine, null), /*#__PURE__*/React.createElement("span", null, $i18n.get({
238
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.rename',
239
+ dm: '重命名'
240
+ }))),
241
+ key: 'rename'
242
+ }, !(nodeInfo !== null && nodeInfo !== void 0 && nodeInfo.isSystem) && !nodesReadOnly && {
243
+ label: /*#__PURE__*/React.createElement("div", {
244
+ className: "flex items-center gap-[8px]"
245
+ }, /*#__PURE__*/React.createElement(SparkCopyLine, null), /*#__PURE__*/React.createElement("span", null, $i18n.get({
246
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.copy',
247
+ dm: '复制'
248
+ }))),
249
+ key: 'copy'
250
+ }, !(nodeInfo !== null && nodeInfo !== void 0 && nodeInfo.isSystem) && !nodesReadOnly && {
251
+ label: /*#__PURE__*/React.createElement("div", {
252
+ className: "flex items-center gap-[8px]"
253
+ }, /*#__PURE__*/React.createElement(SparkDeleteLine, null), /*#__PURE__*/React.createElement("span", null, $i18n.get({
254
+ id: 'spark-flow.components.FlowPanel.ConfigPanel.delete',
255
+ dm: '删除'
256
+ }))),
257
+ key: 'delete',
258
+ danger: true
259
+ }, !nodesReadOnly && {
260
+ type: 'divider'
261
+ }, {
262
+ label: /*#__PURE__*/React.createElement("div", {
263
+ className: "flex items-center spark-flow-node-copy-btn gap-[4px]"
264
+ }, /*#__PURE__*/React.createElement(Tag, {
265
+ className: "spark-flow-node-copy-btn-tag",
266
+ icon: /*#__PURE__*/React.createElement(SparkIdLine, null)
267
+ }, selectedNodeData.id), /*#__PURE__*/React.createElement(SparkCopyLine, {
268
+ className: "spark-flow-node-copy-btn-icon"
269
+ })),
270
+ key: 'id'
271
+ }])
272
+ }
273
+ }, /*#__PURE__*/React.createElement("div", {
274
+ className: "spark-flow-operator-icon-with-bg rounded-[6px] size-[32px] flex-center cursor-pointer"
275
+ }, /*#__PURE__*/React.createElement(SparkMoreLine, {
276
+ className: "spark-flow-node-action-btn text-[24px]"
277
+ }))), /*#__PURE__*/React.createElement(Divider, {
278
+ style: {
279
+ margin: 0,
280
+ height: '20px'
281
+ },
282
+ type: "vertical"
283
+ }))
284
+ }, panelContent, showSingleTest && singleTestPanel && /*#__PURE__*/React.createElement(singleTestPanel, {
285
+ selectedNodeData: selectedNodeData,
286
+ onClose: function onClose() {
287
+ return setShowSingleTest(false);
288
+ },
289
+ disabled: nodesReadOnly
290
+ })));
291
+ });
292
+ var ConfigPanelWrap = /*#__PURE__*/memo(function (props) {
293
+ var selectedNode = useStore(function (state) {
294
+ return state.selectedNode;
295
+ });
296
+ if (!selectedNode) return null;
297
+ return /*#__PURE__*/React.createElement(ConfigPanel, {
298
+ key: selectedNode.id,
299
+ selectedNode: selectedNode,
300
+ singleTestPanel: props.singleTestPanel
301
+ });
302
+ });
303
+ export default ConfigPanelWrap;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import './index.less';
3
+ interface IFlowPanel {
4
+ children?: React.ReactNode[] | React.ReactNode;
5
+ }
6
+ declare const _default: React.NamedExoticComponent<IFlowPanel>;
7
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import React, { memo } from 'react';
2
+ import "./index.less";
3
+ export default /*#__PURE__*/memo(function FlowPanel(props) {
4
+ return /*#__PURE__*/React.createElement("div", {
5
+ className: "spark-flow-panel-group absolute flex gap-[16px] flex-nowrap"
6
+ }, props.children);
7
+ });
@@ -0,0 +1,85 @@
1
+ @import '../../index.less';
2
+
3
+ * {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ .spark-flow-panel-group {
8
+ height: calc(100% - 32px);
9
+ top: 16px;
10
+ right: 16px;
11
+
12
+ > * {
13
+ flex-shrink: 0;
14
+ }
15
+ }
16
+
17
+ .spark-flow-panel {
18
+ background: e('var(--@{ant-prefix}-color-bg-base)');
19
+ display: flex;
20
+ flex-direction: column;
21
+ border: 1px solid e('var(--@{ant-prefix}-color-border-secondary)');
22
+ border-radius: 8px;
23
+ box-shadow: e('var(--@{ant-prefix}-box-shadow-secondary)');
24
+
25
+ &-header {
26
+ padding: 16px 20px;
27
+ flex-shrink: 0;
28
+
29
+ .spark-flow-panel-title {
30
+ font-size: 16px;
31
+ font-weight: 600;
32
+ }
33
+ }
34
+
35
+ &-content {
36
+ border-top: 1px solid e('var(--@{ant-prefix}-color-border-secondary)');
37
+ height: calc(100% - 64px);
38
+ flex: 1;
39
+ overflow-y: auto;
40
+
41
+ .@{ant-prefix}-drawer-inline {
42
+ overflow-y: hidden;
43
+ }
44
+ }
45
+ }
46
+
47
+ .spark-flow-panel-form-second-title {
48
+ font-size: 13px;
49
+ line-height: 20px;
50
+
51
+ .anticon {
52
+ font-size: 20px;
53
+ }
54
+ }
55
+
56
+ .spark-flow-panel-form-section {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: 20px;
60
+ padding: 20px;
61
+ &:not(:last-of-type){
62
+ border-bottom: 1px solid e('var(--@{ant-prefix}-color-border-secondary)');
63
+ }
64
+ }
65
+
66
+ .spark-flow-panel-form-title {
67
+ font-weight: 500;
68
+ font-size: 13px;
69
+ line-height: 20px;
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 4px;
73
+
74
+ &-desc {
75
+ color: e('var(--@{ant-prefix}-color-text-tertiary)');
76
+ font-size: 12px;
77
+ font-weight: normal;
78
+ }
79
+
80
+ .anticon {
81
+ font-weight: normal;
82
+ font-size: 16px;
83
+ color: e('var(--@{ant-prefix}-color-text-tertiary)');
84
+ }
85
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface IPanelContainerProps {
3
+ title?: React.ReactNode;
4
+ right?: React.ReactNode;
5
+ children: React.ReactNode;
6
+ onClose?: () => void;
7
+ noPadding?: boolean;
8
+ hiddenRight?: boolean;
9
+ headerBottom?: React.ReactNode;
10
+ }
11
+ declare const _default: React.NamedExoticComponent<IPanelContainerProps>;
12
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { SparkFalseLine } from '@agentscope-ai/icons';
2
+ import classNames from 'classnames';
3
+ import React, { memo } from 'react';
4
+ export default /*#__PURE__*/memo(function PanelContainer(props) {
5
+ return /*#__PURE__*/React.createElement("div", {
6
+ className: "spark-flow-panel h-full"
7
+ }, /*#__PURE__*/React.createElement("div", {
8
+ className: "spark-flow-panel-header"
9
+ }, /*#__PURE__*/React.createElement("div", {
10
+ className: "flex-justify-between"
11
+ }, /*#__PURE__*/React.createElement("div", {
12
+ className: "spark-flow-panel-title flex-1"
13
+ }, props.title), !props.hiddenRight && /*#__PURE__*/React.createElement("div", {
14
+ className: "flex items-center gap-[8px]"
15
+ }, props.right, /*#__PURE__*/React.createElement("div", {
16
+ onClick: props.onClose,
17
+ className: "spark-flow-operator-icon-with-bg size-[32px] rounded-[6px] flex-center"
18
+ }, /*#__PURE__*/React.createElement(SparkFalseLine, {
19
+ className: "text-[24px] spark-flow-node-action-btn"
20
+ })))), props.headerBottom), /*#__PURE__*/React.createElement("div", {
21
+ className: classNames('spark-flow-panel-content', {
22
+ 'p-[20px]': !props.noPadding
23
+ })
24
+ }, props.children));
25
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: React.MemoExoticComponent<() => React.JSX.Element>;
3
+ export default _default;
@@ -0,0 +1,26 @@
1
+ import { useNodesReadOnly } from "../../hooks";
2
+ import $i18n from "../../i18n";
3
+ import { SparkAddCircleFill } from '@agentscope-ai/icons';
4
+ import { Tooltip } from 'antd';
5
+ import classNames from 'classnames';
6
+ import React, { memo } from 'react';
7
+ import { PopoverNodeMenu } from "../node-menu";
8
+ var AddNodeBtn = function AddNodeBtn() {
9
+ var _useNodesReadOnly = useNodesReadOnly(),
10
+ nodesReadOnly = _useNodesReadOnly.nodesReadOnly;
11
+ return /*#__PURE__*/React.createElement(PopoverNodeMenu, {
12
+ placement: "top"
13
+ }, /*#__PURE__*/React.createElement(Tooltip, {
14
+ title: $i18n.get({
15
+ id: 'spark-flow.components.FlowTools.AddNodeBtn.addNode',
16
+ dm: '添加节点'
17
+ })
18
+ }, /*#__PURE__*/React.createElement("div", {
19
+ className: classNames('spark-flow-tool-icon-btn size-[32px] flex-center', {
20
+ 'spark-flow-tool-icon-btn-disabled': nodesReadOnly
21
+ })
22
+ }, /*#__PURE__*/React.createElement(SparkAddCircleFill, {
23
+ className: "text-[20px]"
24
+ }))));
25
+ };
26
+ export default /*#__PURE__*/memo(AddNodeBtn);
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: React.NamedExoticComponent<object>;
3
+ export default _default;
@@ -0,0 +1,59 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
4
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
5
+ import { useNodesReadOnly } from "../../hooks";
6
+ import { useHistory } from "../../hooks/use-history";
7
+ import $i18n from "../../i18n";
8
+ import { isEventInInput, transformToMacKey } from "../../utils";
9
+ import { SparkRedoLine, SparkUndoLine } from '@agentscope-ai/icons';
10
+ import { useKeyPress } from 'ahooks';
11
+ import { Tooltip } from 'antd';
12
+ import classNames from 'classnames';
13
+ import React, { memo } from 'react';
14
+ export default /*#__PURE__*/memo(function HistoryBtn() {
15
+ var _useHistory = useHistory(),
16
+ canUndo = _useHistory.canUndo,
17
+ canRedo = _useHistory.canRedo,
18
+ undo = _useHistory.undo,
19
+ redo = _useHistory.redo;
20
+ var _useNodesReadOnly = useNodesReadOnly(),
21
+ nodesReadOnly = _useNodesReadOnly.nodesReadOnly;
22
+ useKeyPress(["".concat(transformToMacKey('ctrl'), ".z")], function (event) {
23
+ if (isEventInInput(event) || nodesReadOnly) return;
24
+ undo();
25
+ }, {
26
+ exactMatch: true
27
+ });
28
+ useKeyPress(["".concat(transformToMacKey('ctrl'), ".shift.z")], function (event) {
29
+ if (isEventInInput(event) || nodesReadOnly) return;
30
+ redo();
31
+ }, {
32
+ exactMatch: true
33
+ });
34
+ return /*#__PURE__*/React.createElement("div", {
35
+ className: "spark-flow-tools gap-[8px] items-center flex"
36
+ }, /*#__PURE__*/React.createElement(Tooltip, {
37
+ destroyTooltipOnHide: true,
38
+ title: $i18n.get({
39
+ id: 'spark-flow.components.FlowTools.HistoryBtn.undo',
40
+ dm: '撤销'
41
+ })
42
+ }, /*#__PURE__*/React.createElement("div", {
43
+ className: classNames('spark-flow-tool-icon-btn size-[32px] flex-center', _defineProperty({}, 'spark-flow-tool-icon-btn-disabled', !canUndo || nodesReadOnly)),
44
+ onClick: nodesReadOnly ? undefined : undo
45
+ }, /*#__PURE__*/React.createElement(SparkUndoLine, {
46
+ className: "text-[20px]"
47
+ }))), /*#__PURE__*/React.createElement(Tooltip, {
48
+ destroyTooltipOnHide: true,
49
+ title: $i18n.get({
50
+ id: 'spark-flow.components.FlowTools.HistoryBtn.redo',
51
+ dm: '重做'
52
+ })
53
+ }, /*#__PURE__*/React.createElement("div", {
54
+ className: classNames('spark-flow-tool-icon-btn size-[32px] flex-center', _defineProperty({}, 'spark-flow-tool-icon-btn-disabled', !canRedo || nodesReadOnly)),
55
+ onClick: nodesReadOnly ? undefined : redo
56
+ }, /*#__PURE__*/React.createElement(SparkRedoLine, {
57
+ className: "text-[20px]"
58
+ }))));
59
+ });
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import './index.less';
3
+ declare const _default: React.NamedExoticComponent<object>;
4
+ export default _default;
@@ -0,0 +1,29 @@
1
+ import { Divider } from 'antd';
2
+ import React, { memo } from 'react';
3
+ import AddNodeBtn from "./add-node-btn";
4
+ import HistoryBtn from "./history-btn";
5
+ import "./index.less";
6
+ import LayoutBtn from "./layout-btn";
7
+ import MiniMapBtn from "./mini-map-btn";
8
+ import ScaleBtn from "./scale-btn";
9
+ import ShortKeyBtn from "./short-key-btn";
10
+ import TouchModeBtn from "./touch-mode-btn";
11
+ export default /*#__PURE__*/memo(function FlowTools() {
12
+ return /*#__PURE__*/React.createElement("div", {
13
+ id: "spark-flow-bottom-tools-container",
14
+ className: "nopan absolute items-center flex left-[16px] bottom-[16px] gap-[12px]"
15
+ }, /*#__PURE__*/React.createElement("div", {
16
+ className: "spark-flow-tools gap-[8px] items-center flex"
17
+ }, /*#__PURE__*/React.createElement(MiniMapBtn, null), /*#__PURE__*/React.createElement(Divider, {
18
+ type: "vertical",
19
+ className: "m-0"
20
+ }), /*#__PURE__*/React.createElement(ScaleBtn, null)), /*#__PURE__*/React.createElement("div", {
21
+ className: "spark-flow-tools gap-[8px] items-center flex"
22
+ }, /*#__PURE__*/React.createElement(AddNodeBtn, null), /*#__PURE__*/React.createElement(LayoutBtn, null), /*#__PURE__*/React.createElement(Divider, {
23
+ type: "vertical",
24
+ className: "m-0"
25
+ }), /*#__PURE__*/React.createElement(TouchModeBtn, null), /*#__PURE__*/React.createElement(Divider, {
26
+ type: "vertical",
27
+ className: "m-0"
28
+ }), /*#__PURE__*/React.createElement(ShortKeyBtn, null)), /*#__PURE__*/React.createElement(HistoryBtn, null));
29
+ });
@@ -0,0 +1,82 @@
1
+ @import '../../index.less';
2
+ .spark-flow-tools {
3
+ box-shadow:
4
+ 0 12px 24px -16px rgb(54 54 73 / 4%),
5
+ 0 12px 40px 0 rgb(51 51 71 / 8%),
6
+ 0 0 1px 0 rgb(44 44 54 / 2%);
7
+ border: 1px solid e('var(--@{ant-prefix}-color-border-secondary)');
8
+ background: e('var(--@{ant-prefix}-color-bg-base)');
9
+ padding: 6px;
10
+ border-radius: 8px;
11
+ }
12
+
13
+ .spark-flow-tool-icon-btn {
14
+ cursor: pointer;
15
+ transition: 0.4s ease-in-out;
16
+ color: e('var(--@{ant-prefix}-color-text)');
17
+ border-radius: 6px;
18
+
19
+ &:hover:not(.spark-flow-tool-icon-btn-disabled),
20
+ &.spark-flow-tool-icon-btn-active {
21
+ color: e('var(--@{ant-prefix}-color-primary)');
22
+ background: e('var(--@{ant-prefix}-color-primary-bg)');
23
+ }
24
+
25
+ &.spark-flow-tool-icon-btn-disabled {
26
+ cursor: not-allowed;
27
+ color: e('var(--@{ant-prefix}-color-text-disabled)');
28
+ }
29
+
30
+ .@{ant-prefix}-popover .@{ant-prefix}-popover-content,
31
+ .@{ant-prefix}-dropdown .@{ant-prefix}-dropdown-menu {
32
+ margin-bottom: 6px;
33
+ }
34
+ }
35
+
36
+ .spark-flow-tools-scale-rate {
37
+ width: 38px;
38
+ text-align: center;
39
+ }
40
+
41
+ .spark-flow-touch-mode-select-item {
42
+ cursor: pointer;
43
+ border-radius: 4px;
44
+ transition: 0.4s ease-in-out;
45
+ width: 300px;
46
+ padding: 8px 12px;
47
+
48
+ &-icon {
49
+ background: e('var(--@{ant-prefix}-color-fill-secondary)');
50
+ color: e('var(--@{ant-prefix}-color-text-secondary)');
51
+ border-radius: 4px;
52
+ }
53
+
54
+ &-label {
55
+ font-size: 14px;
56
+ font-weight: 500;
57
+ line-height: 24px;
58
+ color: e('var(--@{ant-prefix}-color-text)');
59
+ }
60
+
61
+ &-desc {
62
+ font-size: 12px;
63
+ line-height: 18px;
64
+ color: e('var(--@{ant-prefix}-color-text-secondary)');
65
+ }
66
+
67
+ &:hover,
68
+ &.spark-flow-touch-mode-select-item-active {
69
+ background: e('var(--@{ant-prefix}-color-primary-bg)');
70
+
71
+ .spark-flow-touch-mode-select-item-icon {
72
+ background: e('var(--@{ant-prefix}-color-primary-border)');
73
+ color: e('var(--@{ant-prefix}-color-primary)');
74
+ }
75
+ }
76
+ }
77
+
78
+ .spark-flow-touch-mode-btn-container {
79
+ .@{ant-prefix}-popover .@{ant-prefix}-popover-inner {
80
+ padding: 4px;
81
+ }
82
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: React.NamedExoticComponent<object>;
3
+ export default _default;