@yh-ui/flow 0.1.21
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/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/Flow.d.vue.ts +306 -0
- package/dist/Flow.vue +959 -0
- package/dist/Flow.vue.d.ts +306 -0
- package/dist/__tests__/ai-workflow.ssr.test.cjs +352 -0
- package/dist/__tests__/ai-workflow.ssr.test.d.ts +1 -0
- package/dist/__tests__/ai-workflow.ssr.test.mjs +283 -0
- package/dist/__tests__/ai-workflow.test.cjs +109 -0
- package/dist/__tests__/ai-workflow.test.d.ts +1 -0
- package/dist/__tests__/ai-workflow.test.mjs +112 -0
- package/dist/__tests__/bpmn.ssr.test.cjs +278 -0
- package/dist/__tests__/bpmn.ssr.test.d.ts +1 -0
- package/dist/__tests__/bpmn.ssr.test.mjs +237 -0
- package/dist/__tests__/bpmn.test.cjs +103 -0
- package/dist/__tests__/bpmn.test.d.ts +1 -0
- package/dist/__tests__/bpmn.test.mjs +106 -0
- package/dist/__tests__/custom-types.test.cjs +300 -0
- package/dist/__tests__/custom-types.test.d.ts +1 -0
- package/dist/__tests__/custom-types.test.mjs +248 -0
- package/dist/__tests__/edge.test.cjs +56 -0
- package/dist/__tests__/edge.test.d.ts +1 -0
- package/dist/__tests__/edge.test.mjs +69 -0
- package/dist/__tests__/event-bus.test.cjs +80 -0
- package/dist/__tests__/event-bus.test.d.ts +1 -0
- package/dist/__tests__/event-bus.test.mjs +51 -0
- package/dist/__tests__/flow.ssr.test.cjs +156 -0
- package/dist/__tests__/flow.ssr.test.d.ts +1 -0
- package/dist/__tests__/flow.ssr.test.mjs +112 -0
- package/dist/__tests__/geometry.test.cjs +191 -0
- package/dist/__tests__/geometry.test.d.ts +1 -0
- package/dist/__tests__/geometry.test.mjs +105 -0
- package/dist/__tests__/graph.test.cjs +115 -0
- package/dist/__tests__/graph.test.d.ts +1 -0
- package/dist/__tests__/graph.test.mjs +85 -0
- package/dist/__tests__/history-plugin.test.cjs +191 -0
- package/dist/__tests__/history-plugin.test.d.ts +1 -0
- package/dist/__tests__/history-plugin.test.mjs +161 -0
- package/dist/__tests__/history.test.cjs +81 -0
- package/dist/__tests__/history.test.d.ts +1 -0
- package/dist/__tests__/history.test.mjs +43 -0
- package/dist/__tests__/layout.test.cjs +213 -0
- package/dist/__tests__/layout.test.d.ts +1 -0
- package/dist/__tests__/layout.test.mjs +170 -0
- package/dist/__tests__/node-edit-panel.ssr.test.cjs +168 -0
- package/dist/__tests__/node-edit-panel.ssr.test.d.ts +1 -0
- package/dist/__tests__/node-edit-panel.ssr.test.mjs +118 -0
- package/dist/__tests__/node-group-plugin.test.cjs +235 -0
- package/dist/__tests__/node-group-plugin.test.d.ts +1 -0
- package/dist/__tests__/node-group-plugin.test.mjs +187 -0
- package/dist/__tests__/node-handles.test.cjs +340 -0
- package/dist/__tests__/node-handles.test.d.ts +1 -0
- package/dist/__tests__/node-handles.test.mjs +230 -0
- package/dist/__tests__/plugin.test.cjs +151 -0
- package/dist/__tests__/plugin.test.d.ts +1 -0
- package/dist/__tests__/plugin.test.mjs +116 -0
- package/dist/__tests__/transform.test.cjs +58 -0
- package/dist/__tests__/transform.test.d.ts +1 -0
- package/dist/__tests__/transform.test.mjs +38 -0
- package/dist/__tests__/useAlignment.test.cjs +91 -0
- package/dist/__tests__/useAlignment.test.d.ts +1 -0
- package/dist/__tests__/useAlignment.test.mjs +52 -0
- package/dist/__tests__/useEdges.test.cjs +117 -0
- package/dist/__tests__/useEdges.test.d.ts +1 -0
- package/dist/__tests__/useEdges.test.mjs +80 -0
- package/dist/__tests__/useKeyboard.test.cjs +88 -0
- package/dist/__tests__/useKeyboard.test.d.ts +1 -0
- package/dist/__tests__/useKeyboard.test.mjs +56 -0
- package/dist/__tests__/useNodes.test.cjs +150 -0
- package/dist/__tests__/useNodes.test.d.ts +1 -0
- package/dist/__tests__/useNodes.test.mjs +80 -0
- package/dist/__tests__/useSelection.test.cjs +112 -0
- package/dist/__tests__/useSelection.test.d.ts +1 -0
- package/dist/__tests__/useSelection.test.mjs +76 -0
- package/dist/__tests__/useViewport.test.cjs +171 -0
- package/dist/__tests__/useViewport.test.d.ts +1 -0
- package/dist/__tests__/useViewport.test.mjs +82 -0
- package/dist/__tests__/utils/ssr.cjs +124 -0
- package/dist/__tests__/utils/ssr.d.ts +33 -0
- package/dist/__tests__/utils/ssr.mjs +129 -0
- package/dist/__tests__/validation.test.cjs +95 -0
- package/dist/__tests__/validation.test.d.ts +1 -0
- package/dist/__tests__/validation.test.mjs +36 -0
- package/dist/components/AiNodeEditPanel.d.vue.ts +13 -0
- package/dist/components/AiNodeEditPanel.vue +413 -0
- package/dist/components/AiNodeEditPanel.vue.d.ts +13 -0
- package/dist/components/EdgeEditPanel.d.vue.ts +14 -0
- package/dist/components/EdgeEditPanel.vue +205 -0
- package/dist/components/EdgeEditPanel.vue.d.ts +14 -0
- package/dist/components/NodeEditPanel.d.vue.ts +13 -0
- package/dist/components/NodeEditPanel.vue +214 -0
- package/dist/components/NodeEditPanel.vue.d.ts +13 -0
- package/dist/components/edges/BaseEdge.d.vue.ts +23 -0
- package/dist/components/edges/BaseEdge.vue +55 -0
- package/dist/components/edges/BaseEdge.vue.d.ts +23 -0
- package/dist/components/edges/BezierEdge.d.vue.ts +22 -0
- package/dist/components/edges/BezierEdge.vue +57 -0
- package/dist/components/edges/BezierEdge.vue.d.ts +22 -0
- package/dist/components/edges/DataFlowEdge.d.vue.ts +41 -0
- package/dist/components/edges/DataFlowEdge.vue +211 -0
- package/dist/components/edges/DataFlowEdge.vue.d.ts +41 -0
- package/dist/components/edges/SmoothEdge.d.vue.ts +22 -0
- package/dist/components/edges/SmoothEdge.vue +53 -0
- package/dist/components/edges/SmoothEdge.vue.d.ts +22 -0
- package/dist/components/edges/StepEdge.d.vue.ts +22 -0
- package/dist/components/edges/StepEdge.vue +42 -0
- package/dist/components/edges/StepEdge.vue.d.ts +22 -0
- package/dist/components/edges/index.cjs +41 -0
- package/dist/components/edges/index.d.ts +5 -0
- package/dist/components/edges/index.mjs +5 -0
- package/dist/components/nodes/BaseNode.d.vue.ts +25 -0
- package/dist/components/nodes/BaseNode.vue +93 -0
- package/dist/components/nodes/BaseNode.vue.d.ts +25 -0
- package/dist/components/nodes/CustomNode.d.vue.ts +36 -0
- package/dist/components/nodes/CustomNode.vue +44 -0
- package/dist/components/nodes/CustomNode.vue.d.ts +36 -0
- package/dist/components/nodes/DatabaseNode.d.vue.ts +19 -0
- package/dist/components/nodes/DatabaseNode.vue +62 -0
- package/dist/components/nodes/DatabaseNode.vue.d.ts +19 -0
- package/dist/components/nodes/DiamondNode.d.vue.ts +19 -0
- package/dist/components/nodes/DiamondNode.vue +62 -0
- package/dist/components/nodes/DiamondNode.vue.d.ts +19 -0
- package/dist/components/nodes/GroupNode.d.vue.ts +31 -0
- package/dist/components/nodes/GroupNode.vue +48 -0
- package/dist/components/nodes/GroupNode.vue.d.ts +31 -0
- package/dist/components/nodes/InputNode.d.vue.ts +23 -0
- package/dist/components/nodes/InputNode.vue +63 -0
- package/dist/components/nodes/InputNode.vue.d.ts +23 -0
- package/dist/components/nodes/NodeResizer.d.vue.ts +27 -0
- package/dist/components/nodes/NodeResizer.vue +89 -0
- package/dist/components/nodes/NodeResizer.vue.d.ts +27 -0
- package/dist/components/nodes/NodeToolbar.d.vue.ts +32 -0
- package/dist/components/nodes/NodeToolbar.vue +101 -0
- package/dist/components/nodes/NodeToolbar.vue.d.ts +32 -0
- package/dist/components/nodes/OutputNode.d.vue.ts +21 -0
- package/dist/components/nodes/OutputNode.vue +53 -0
- package/dist/components/nodes/OutputNode.vue.d.ts +21 -0
- package/dist/components/nodes/ai-workflow/AiAgentNode.d.vue.ts +20 -0
- package/dist/components/nodes/ai-workflow/AiAgentNode.vue +59 -0
- package/dist/components/nodes/ai-workflow/AiAgentNode.vue.d.ts +20 -0
- package/dist/components/nodes/ai-workflow/AiConditionNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiConditionNode.vue +65 -0
- package/dist/components/nodes/ai-workflow/AiConditionNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiEndNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiEndNode.vue +47 -0
- package/dist/components/nodes/ai-workflow/AiEndNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiLlmNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiLlmNode.vue +64 -0
- package/dist/components/nodes/ai-workflow/AiLlmNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiMemoryNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiMemoryNode.vue +59 -0
- package/dist/components/nodes/ai-workflow/AiMemoryNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiPromptNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiPromptNode.vue +61 -0
- package/dist/components/nodes/ai-workflow/AiPromptNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiStartNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiStartNode.vue +47 -0
- package/dist/components/nodes/ai-workflow/AiStartNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiToolNode.d.vue.ts +19 -0
- package/dist/components/nodes/ai-workflow/AiToolNode.vue +59 -0
- package/dist/components/nodes/ai-workflow/AiToolNode.vue.d.ts +19 -0
- package/dist/components/nodes/ai-workflow/index.cjs +109 -0
- package/dist/components/nodes/ai-workflow/index.d.ts +23 -0
- package/dist/components/nodes/ai-workflow/index.mjs +37 -0
- package/dist/components/nodes/bpmn/BpmnEndEvent.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnEndEvent.vue +50 -0
- package/dist/components/nodes/bpmn/BpmnEndEvent.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnExclusiveGateway.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue +60 -0
- package/dist/components/nodes/bpmn/BpmnExclusiveGateway.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnInclusiveGateway.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue +60 -0
- package/dist/components/nodes/bpmn/BpmnInclusiveGateway.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnParallelGateway.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnParallelGateway.vue +60 -0
- package/dist/components/nodes/bpmn/BpmnParallelGateway.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnServiceTask.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnServiceTask.vue +55 -0
- package/dist/components/nodes/bpmn/BpmnServiceTask.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnStartEvent.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnStartEvent.vue +50 -0
- package/dist/components/nodes/bpmn/BpmnStartEvent.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnTask.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnTask.vue +54 -0
- package/dist/components/nodes/bpmn/BpmnTask.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnUserTask.d.vue.ts +19 -0
- package/dist/components/nodes/bpmn/BpmnUserTask.vue +55 -0
- package/dist/components/nodes/bpmn/BpmnUserTask.vue.d.ts +19 -0
- package/dist/components/nodes/bpmn/index.cjs +109 -0
- package/dist/components/nodes/bpmn/index.d.ts +23 -0
- package/dist/components/nodes/bpmn/index.mjs +37 -0
- package/dist/components/nodes/index.cjs +246 -0
- package/dist/components/nodes/index.d.ts +13 -0
- package/dist/components/nodes/index.mjs +44 -0
- package/dist/core/FlowContext.cjs +21 -0
- package/dist/core/FlowContext.d.ts +10 -0
- package/dist/core/FlowContext.mjs +13 -0
- package/dist/core/index.cjs +104 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.mjs +9 -0
- package/dist/core/useAlignment.cjs +81 -0
- package/dist/core/useAlignment.d.ts +33 -0
- package/dist/core/useAlignment.mjs +71 -0
- package/dist/core/useEdges.cjs +132 -0
- package/dist/core/useEdges.d.ts +29 -0
- package/dist/core/useEdges.mjs +89 -0
- package/dist/core/useFlow.cjs +40 -0
- package/dist/core/useFlow.d.ts +31 -0
- package/dist/core/useFlow.mjs +32 -0
- package/dist/core/useHistory.cjs +63 -0
- package/dist/core/useHistory.d.ts +15 -0
- package/dist/core/useHistory.mjs +54 -0
- package/dist/core/useKeyboard.cjs +54 -0
- package/dist/core/useKeyboard.d.ts +18 -0
- package/dist/core/useKeyboard.mjs +45 -0
- package/dist/core/useNodeDistribution.cjs +171 -0
- package/dist/core/useNodeDistribution.d.ts +12 -0
- package/dist/core/useNodeDistribution.mjs +145 -0
- package/dist/core/useNodes.cjs +146 -0
- package/dist/core/useNodes.d.ts +26 -0
- package/dist/core/useNodes.mjs +101 -0
- package/dist/core/useSelection.cjs +83 -0
- package/dist/core/useSelection.d.ts +18 -0
- package/dist/core/useSelection.mjs +53 -0
- package/dist/core/useViewport.cjs +157 -0
- package/dist/core/useViewport.d.ts +65 -0
- package/dist/core/useViewport.mjs +125 -0
- package/dist/flow.cjs +240 -0
- package/dist/flow.d.ts +276 -0
- package/dist/flow.mjs +230 -0
- package/dist/index.cjs +378 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.mjs +50 -0
- package/dist/plugins/index.cjs +96 -0
- package/dist/plugins/index.d.ts +34 -0
- package/dist/plugins/index.mjs +47 -0
- package/dist/plugins/plugin.cjs +117 -0
- package/dist/plugins/plugin.d.ts +72 -0
- package/dist/plugins/plugin.mjs +110 -0
- package/dist/plugins/plugins/controls.cjs +38 -0
- package/dist/plugins/plugins/controls.d.ts +12 -0
- package/dist/plugins/plugins/controls.mjs +28 -0
- package/dist/plugins/plugins/export.cjs +102 -0
- package/dist/plugins/plugins/export.d.ts +12 -0
- package/dist/plugins/plugins/export.mjs +89 -0
- package/dist/plugins/plugins/grid.cjs +36 -0
- package/dist/plugins/plugins/grid.d.ts +11 -0
- package/dist/plugins/plugins/grid.mjs +26 -0
- package/dist/plugins/plugins/history.cjs +140 -0
- package/dist/plugins/plugins/history.d.ts +53 -0
- package/dist/plugins/plugins/history.mjs +132 -0
- package/dist/plugins/plugins/index.cjs +104 -0
- package/dist/plugins/plugins/index.d.ts +9 -0
- package/dist/plugins/plugins/index.mjs +9 -0
- package/dist/plugins/plugins/keyboard.cjs +27 -0
- package/dist/plugins/plugins/keyboard.d.ts +10 -0
- package/dist/plugins/plugins/keyboard.mjs +18 -0
- package/dist/plugins/plugins/layout.cjs +275 -0
- package/dist/plugins/plugins/layout.d.ts +34 -0
- package/dist/plugins/plugins/layout.mjs +246 -0
- package/dist/plugins/plugins/minimap.cjs +60 -0
- package/dist/plugins/plugins/minimap.d.ts +25 -0
- package/dist/plugins/plugins/minimap.mjs +50 -0
- package/dist/plugins/plugins/node-group.cjs +209 -0
- package/dist/plugins/plugins/node-group.d.ts +26 -0
- package/dist/plugins/plugins/node-group.mjs +178 -0
- package/dist/plugins/plugins/snap.cjs +36 -0
- package/dist/plugins/plugins/snap.d.ts +12 -0
- package/dist/plugins/plugins/snap.mjs +26 -0
- package/dist/renderer/AlignmentLines.d.vue.ts +5 -0
- package/dist/renderer/AlignmentLines.vue +113 -0
- package/dist/renderer/AlignmentLines.vue.d.ts +5 -0
- package/dist/renderer/Background.d.vue.ts +7 -0
- package/dist/renderer/Background.vue +86 -0
- package/dist/renderer/Background.vue.d.ts +7 -0
- package/dist/renderer/Controls.d.vue.ts +13 -0
- package/dist/renderer/Controls.vue +82 -0
- package/dist/renderer/Controls.vue.d.ts +13 -0
- package/dist/renderer/EdgeHandlesRenderer.d.vue.ts +11 -0
- package/dist/renderer/EdgeHandlesRenderer.vue +75 -0
- package/dist/renderer/EdgeHandlesRenderer.vue.d.ts +11 -0
- package/dist/renderer/EdgeRenderer.d.vue.ts +39 -0
- package/dist/renderer/EdgeRenderer.vue +204 -0
- package/dist/renderer/EdgeRenderer.vue.d.ts +39 -0
- package/dist/renderer/FlowBackground.d.vue.ts +11 -0
- package/dist/renderer/FlowBackground.vue +82 -0
- package/dist/renderer/FlowBackground.vue.d.ts +11 -0
- package/dist/renderer/Minimap.d.vue.ts +30 -0
- package/dist/renderer/Minimap.vue +290 -0
- package/dist/renderer/Minimap.vue.d.ts +30 -0
- package/dist/renderer/NodeRenderer.d.vue.ts +56 -0
- package/dist/renderer/NodeRenderer.vue +328 -0
- package/dist/renderer/NodeRenderer.vue.d.ts +56 -0
- package/dist/renderer/SelectionBox.d.vue.ts +11 -0
- package/dist/renderer/SelectionBox.vue +28 -0
- package/dist/renderer/SelectionBox.vue.d.ts +11 -0
- package/dist/types/edge.cjs +13 -0
- package/dist/types/edge.d.ts +65 -0
- package/dist/types/edge.mjs +6 -0
- package/dist/types/events.cjs +1 -0
- package/dist/types/events.d.ts +115 -0
- package/dist/types/events.mjs +0 -0
- package/dist/types/index.cjs +1 -0
- package/dist/types/index.d.ts +366 -0
- package/dist/types/index.mjs +0 -0
- package/dist/types/node.cjs +9 -0
- package/dist/types/node.d.ts +90 -0
- package/dist/types/node.mjs +3 -0
- package/dist/types/viewport.cjs +42 -0
- package/dist/types/viewport.d.ts +62 -0
- package/dist/types/viewport.mjs +36 -0
- package/dist/utils/bpmn-engine.cjs +390 -0
- package/dist/utils/bpmn-engine.d.ts +164 -0
- package/dist/utils/bpmn-engine.mjs +378 -0
- package/dist/utils/bpmn.cjs +492 -0
- package/dist/utils/bpmn.d.ts +53 -0
- package/dist/utils/bpmn.mjs +430 -0
- package/dist/utils/collaboration.cjs +537 -0
- package/dist/utils/collaboration.d.ts +189 -0
- package/dist/utils/collaboration.mjs +521 -0
- package/dist/utils/custom-types.cjs +138 -0
- package/dist/utils/custom-types.d.ts +78 -0
- package/dist/utils/custom-types.mjs +108 -0
- package/dist/utils/edge.cjs +235 -0
- package/dist/utils/edge.d.ts +79 -0
- package/dist/utils/edge.mjs +172 -0
- package/dist/utils/event-bus.cjs +91 -0
- package/dist/utils/event-bus.d.ts +39 -0
- package/dist/utils/event-bus.mjs +82 -0
- package/dist/utils/geometry.cjs +178 -0
- package/dist/utils/geometry.d.ts +186 -0
- package/dist/utils/geometry.mjs +144 -0
- package/dist/utils/graph.cjs +158 -0
- package/dist/utils/graph.d.ts +40 -0
- package/dist/utils/graph.mjs +147 -0
- package/dist/utils/index.cjs +137 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.mjs +12 -0
- package/dist/utils/performance.cjs +94 -0
- package/dist/utils/performance.d.ts +18 -0
- package/dist/utils/performance.mjs +82 -0
- package/dist/utils/screenshot.cjs +87 -0
- package/dist/utils/screenshot.d.ts +22 -0
- package/dist/utils/screenshot.mjs +66 -0
- package/dist/utils/theme.cjs +228 -0
- package/dist/utils/theme.d.ts +92 -0
- package/dist/utils/theme.mjs +217 -0
- package/dist/utils/transform.cjs +76 -0
- package/dist/utils/transform.d.ts +45 -0
- package/dist/utils/transform.mjs +57 -0
- package/dist/utils/validation.cjs +107 -0
- package/dist/utils/validation.d.ts +29 -0
- package/dist/utils/validation.mjs +85 -0
- package/package.json +61 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
nodeId: string;
|
|
3
|
+
selected?: boolean;
|
|
4
|
+
minWidth?: number;
|
|
5
|
+
minHeight?: number;
|
|
6
|
+
keepAspectRatio?: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
9
|
+
resize: (data: {
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
x?: number;
|
|
13
|
+
y?: number;
|
|
14
|
+
}) => any;
|
|
15
|
+
resizeStart: (event: MouseEvent) => any;
|
|
16
|
+
resizeEnd: (event: MouseEvent) => any;
|
|
17
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
+
onResize?: ((data: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
x?: number;
|
|
22
|
+
y?: number;
|
|
23
|
+
}) => any) | undefined;
|
|
24
|
+
onResizeStart?: ((event: MouseEvent) => any) | undefined;
|
|
25
|
+
onResizeEnd?: ((event: MouseEvent) => any) | undefined;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
export default _default;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Position } from '../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
nodeId: string;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
position?: Position;
|
|
6
|
+
offset?: number;
|
|
7
|
+
teleportTo?: string;
|
|
8
|
+
};
|
|
9
|
+
declare var __VLS_5: {};
|
|
10
|
+
type __VLS_Slots = {} & {
|
|
11
|
+
default?: (props: typeof __VLS_5) => any;
|
|
12
|
+
};
|
|
13
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {
|
|
14
|
+
updatePosition: () => void;
|
|
15
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
|
+
delete: () => any;
|
|
17
|
+
copy: () => any;
|
|
18
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
onDelete?: (() => any) | undefined;
|
|
20
|
+
onCopy?: (() => any) | undefined;
|
|
21
|
+
}>, {
|
|
22
|
+
position: Position;
|
|
23
|
+
offset: number;
|
|
24
|
+
teleportTo: string;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
27
|
+
export default _default;
|
|
28
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
29
|
+
new (): {
|
|
30
|
+
$slots: S;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Teleport :to="teleportTarget">
|
|
3
|
+
<div
|
|
4
|
+
v-if="isVisible"
|
|
5
|
+
ref="toolbarRef"
|
|
6
|
+
class="yh-flow-node-toolbar"
|
|
7
|
+
:style="toolbarStyle"
|
|
8
|
+
@mousedown.stop
|
|
9
|
+
@click.stop
|
|
10
|
+
>
|
|
11
|
+
<slot>
|
|
12
|
+
<!-- 默认工具栏内容 -->
|
|
13
|
+
<div class="default-toolbar">
|
|
14
|
+
<button @click="emit('delete')">Delete</button>
|
|
15
|
+
<button @click="emit('copy')">Copy</button>
|
|
16
|
+
</div>
|
|
17
|
+
</slot>
|
|
18
|
+
</div>
|
|
19
|
+
</Teleport>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script setup>
|
|
23
|
+
import { computed, ref, onMounted, onBeforeUnmount, watch } from "vue";
|
|
24
|
+
const props = defineProps({
|
|
25
|
+
nodeId: { type: String, required: true },
|
|
26
|
+
selected: { type: Boolean, required: false },
|
|
27
|
+
position: { type: String, required: false, default: "top" },
|
|
28
|
+
offset: { type: Number, required: false, default: 10 },
|
|
29
|
+
teleportTo: { type: String, required: false, default: "body" }
|
|
30
|
+
});
|
|
31
|
+
const emit = defineEmits(["delete", "copy"]);
|
|
32
|
+
const toolbarRef = ref();
|
|
33
|
+
const isVisible = computed(() => props.selected);
|
|
34
|
+
const toolbarStyle = ref({
|
|
35
|
+
position: "absolute",
|
|
36
|
+
top: "0px",
|
|
37
|
+
left: "0px",
|
|
38
|
+
zIndex: 99999,
|
|
39
|
+
transform: ""
|
|
40
|
+
});
|
|
41
|
+
const teleportTarget = computed(() => props.teleportTo);
|
|
42
|
+
let rafId = 0;
|
|
43
|
+
const updatePosition = () => {
|
|
44
|
+
if (!isVisible.value) return;
|
|
45
|
+
const nodeEl = document.getElementById(`node-${props.nodeId}`);
|
|
46
|
+
if (!nodeEl) {
|
|
47
|
+
rafId = requestAnimationFrame(updatePosition);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const rect = nodeEl.getBoundingClientRect();
|
|
51
|
+
const scrollX = window.scrollX;
|
|
52
|
+
const scrollY = window.scrollY;
|
|
53
|
+
let top = 0;
|
|
54
|
+
let left = 0;
|
|
55
|
+
if (props.position === "top") {
|
|
56
|
+
top = rect.top + scrollY - props.offset - 40;
|
|
57
|
+
left = rect.left + scrollX + rect.width / 2;
|
|
58
|
+
} else if (props.position === "bottom") {
|
|
59
|
+
top = rect.bottom + scrollY + props.offset;
|
|
60
|
+
left = rect.left + scrollX + rect.width / 2;
|
|
61
|
+
} else if (props.position === "left") {
|
|
62
|
+
top = rect.top + scrollY + rect.height / 2;
|
|
63
|
+
left = rect.left + scrollX - props.offset - 60;
|
|
64
|
+
} else if (props.position === "right") {
|
|
65
|
+
top = rect.top + scrollY + rect.height / 2;
|
|
66
|
+
left = rect.right + scrollX + props.offset;
|
|
67
|
+
}
|
|
68
|
+
toolbarStyle.value = {
|
|
69
|
+
...toolbarStyle.value,
|
|
70
|
+
top: `${top}px`,
|
|
71
|
+
left: `${left}px`,
|
|
72
|
+
transform: props.position === "top" || props.position === "bottom" ? "translateX(-50%)" : "translateY(-50%)"
|
|
73
|
+
};
|
|
74
|
+
rafId = requestAnimationFrame(updatePosition);
|
|
75
|
+
};
|
|
76
|
+
watch(isVisible, (val) => {
|
|
77
|
+
if (val) {
|
|
78
|
+
updatePosition();
|
|
79
|
+
} else {
|
|
80
|
+
if (rafId) {
|
|
81
|
+
cancelAnimationFrame(rafId);
|
|
82
|
+
rafId = 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
onMounted(() => {
|
|
87
|
+
if (isVisible.value) {
|
|
88
|
+
updatePosition();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
onBeforeUnmount(() => {
|
|
92
|
+
if (rafId) cancelAnimationFrame(rafId);
|
|
93
|
+
});
|
|
94
|
+
defineExpose({
|
|
95
|
+
updatePosition
|
|
96
|
+
});
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<style scoped>
|
|
100
|
+
.yh-flow-node-toolbar{background:#fff;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);padding:4px;pointer-events:auto}.default-toolbar{display:flex;gap:4px}.default-toolbar button{background:transparent;border:none;border-radius:4px;color:#475569;cursor:pointer;font-size:11px;padding:4px 8px}.default-toolbar button:hover{background:#f1f5f9;color:#3b82f6}
|
|
101
|
+
</style>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Position } from '../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
nodeId: string;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
position?: Position;
|
|
6
|
+
offset?: number;
|
|
7
|
+
teleportTo?: string;
|
|
8
|
+
};
|
|
9
|
+
declare var __VLS_5: {};
|
|
10
|
+
type __VLS_Slots = {} & {
|
|
11
|
+
default?: (props: typeof __VLS_5) => any;
|
|
12
|
+
};
|
|
13
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {
|
|
14
|
+
updatePosition: () => void;
|
|
15
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
|
+
delete: () => any;
|
|
17
|
+
copy: () => any;
|
|
18
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
onDelete?: (() => any) | undefined;
|
|
20
|
+
onCopy?: (() => any) | undefined;
|
|
21
|
+
}>, {
|
|
22
|
+
position: Position;
|
|
23
|
+
offset: number;
|
|
24
|
+
teleportTo: string;
|
|
25
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
27
|
+
export default _default;
|
|
28
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
29
|
+
new (): {
|
|
30
|
+
$slots: S;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Node, NodeStyle } from '../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: Node['data'];
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
labelColor?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
14
|
+
label: string;
|
|
15
|
+
style: NodeStyle;
|
|
16
|
+
connectable: boolean;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
dragging: boolean;
|
|
19
|
+
labelColor: string;
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
id: { type: String, required: true },
|
|
5
|
+
type: { type: String, required: true },
|
|
6
|
+
data: { type: null, required: true },
|
|
7
|
+
selected: { type: Boolean, required: true, default: false },
|
|
8
|
+
dragging: { type: Boolean, required: true, default: false },
|
|
9
|
+
connectable: { type: Boolean, required: true, default: true },
|
|
10
|
+
style: { type: Object, required: false, default: () => ({}) },
|
|
11
|
+
label: { type: String, required: false, default: "" },
|
|
12
|
+
labelColor: { type: String, required: false, default: "" }
|
|
13
|
+
});
|
|
14
|
+
const nodeStyle = computed(() => {
|
|
15
|
+
const base = {
|
|
16
|
+
padding: "10px 15px",
|
|
17
|
+
borderRadius: "12px 4px 4px 4px",
|
|
18
|
+
border: "1px solid #e6a23c",
|
|
19
|
+
backgroundColor: "#fff7e6",
|
|
20
|
+
minWidth: "80px",
|
|
21
|
+
textAlign: "center",
|
|
22
|
+
transition: "all 0.2s"
|
|
23
|
+
};
|
|
24
|
+
if (props.selected) {
|
|
25
|
+
base.border = "2px solid #e6a23c";
|
|
26
|
+
base.boxShadow = "0 0 8px rgba(230, 162, 60, 0.4)";
|
|
27
|
+
}
|
|
28
|
+
return { ...base, ...props.style };
|
|
29
|
+
});
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<div :class="['flow-output-node', {
|
|
34
|
+
selected,
|
|
35
|
+
dragging
|
|
36
|
+
}]" :style="nodeStyle">
|
|
37
|
+
<div
|
|
38
|
+
class="flow-handle-left"
|
|
39
|
+
v-if="connectable"
|
|
40
|
+
data-handle-type="target"
|
|
41
|
+
data-handle-position="left"
|
|
42
|
+
/>
|
|
43
|
+
<div class="flow-node-label" :style="{
|
|
44
|
+
color: labelColor || data?.labelColor || '#000'
|
|
45
|
+
}">
|
|
46
|
+
{{ label || data?.label || 'Output' }}
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<style scoped>
|
|
52
|
+
.flow-output-node{cursor:pointer;display:inline-block;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.flow-output-node.dragging{cursor:grabbing}.flow-output-node .flow-handle-left{background-color:#e6a23c;border:2px solid #fff;border-radius:50%;cursor:crosshair;height:12px;left:-6px;position:absolute;top:50%;transform:translateY(-50%);width:12px}.flow-node-label{color:#000;font-family:Courier New,Courier,monospace;font-size:13px;font-weight:400}
|
|
53
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Node, NodeStyle } from '../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: Node['data'];
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
labelColor?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
14
|
+
label: string;
|
|
15
|
+
style: NodeStyle;
|
|
16
|
+
connectable: boolean;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
dragging: boolean;
|
|
19
|
+
labelColor: string;
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
data: NodeData;
|
|
16
|
+
connectable: boolean;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
dragging: boolean;
|
|
19
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
id: { type: String, required: true },
|
|
5
|
+
type: { type: String, required: true },
|
|
6
|
+
data: { type: Object, required: true, default: () => ({}) },
|
|
7
|
+
selected: { type: Boolean, required: true, default: false },
|
|
8
|
+
dragging: { type: Boolean, required: true, default: false },
|
|
9
|
+
connectable: { type: Boolean, required: true, default: true },
|
|
10
|
+
style: { type: Object, required: false, default: () => ({}) },
|
|
11
|
+
label: { type: String, required: false, default: "Agent" }
|
|
12
|
+
});
|
|
13
|
+
const nodeStyle = computed(() => {
|
|
14
|
+
const base = {
|
|
15
|
+
padding: "12px 16px",
|
|
16
|
+
minWidth: "160px",
|
|
17
|
+
borderRadius: "12px",
|
|
18
|
+
border: "1px solid #f97316",
|
|
19
|
+
backgroundColor: "#fff7ed",
|
|
20
|
+
transition: "all 0.2s"
|
|
21
|
+
};
|
|
22
|
+
if (props.selected) {
|
|
23
|
+
base.border = "2px solid #f97316";
|
|
24
|
+
base.boxShadow = "0 0 12px rgba(249, 115, 22, 0.4)";
|
|
25
|
+
}
|
|
26
|
+
return { ...base, ...props.style };
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<div :class="['ai-agent-node', {
|
|
32
|
+
selected,
|
|
33
|
+
dragging
|
|
34
|
+
}]" :style="nodeStyle">
|
|
35
|
+
<div
|
|
36
|
+
v-if="connectable"
|
|
37
|
+
class="ai-handle ai-handle-target"
|
|
38
|
+
data-handle-type="target"
|
|
39
|
+
data-handle-position="left"
|
|
40
|
+
/>
|
|
41
|
+
<div class="ai-node-header">
|
|
42
|
+
<span class="ai-node-icon">🤖</span>
|
|
43
|
+
<span class="ai-node-title">{{ label || data?.label || 'Agent' }}</span>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="ai-node-body">
|
|
46
|
+
<div class="ai-node-tools">{{ props.data?.tools?.length || 0 }} 个工具</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div
|
|
49
|
+
v-if="connectable"
|
|
50
|
+
class="ai-handle ai-handle-source"
|
|
51
|
+
data-handle-type="source"
|
|
52
|
+
data-handle-position="right"
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<style scoped>
|
|
58
|
+
.ai-agent-node{cursor:pointer;display:inline-block;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ai-agent-node.dragging{cursor:grabbing;z-index:100}.ai-node-header{align-items:center;display:flex;gap:6px;margin-bottom:8px}.ai-node-icon{font-size:16px}.ai-node-title{color:#c2410c;font-size:13px;font-weight:600}.ai-node-body{font-size:12px}.ai-node-tools{background:#ffedd5;border-radius:4px;color:#ea580c;display:inline-block;padding:2px 8px}.ai-handle{background:#f97316;border:2px solid #fff;border-radius:50%;cursor:crosshair;height:12px;position:absolute;width:12px;z-index:20}.ai-handle-target{left:-8px;top:50%;transform:translateY(-50%)}.ai-handle-source{right:-8px;top:50%;transform:translateY(-50%)}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
data: NodeData;
|
|
16
|
+
connectable: boolean;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
dragging: boolean;
|
|
19
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
connectable: boolean;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
dragging: boolean;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
id: { type: String, required: true },
|
|
5
|
+
type: { type: String, required: true },
|
|
6
|
+
data: { type: Object, required: true },
|
|
7
|
+
selected: { type: Boolean, required: true, default: false },
|
|
8
|
+
dragging: { type: Boolean, required: true, default: false },
|
|
9
|
+
connectable: { type: Boolean, required: true, default: true },
|
|
10
|
+
style: { type: Object, required: false, default: () => ({}) },
|
|
11
|
+
label: { type: String, required: false, default: "\u6761\u4EF6\u5206\u652F" }
|
|
12
|
+
});
|
|
13
|
+
const nodeStyle = computed(() => {
|
|
14
|
+
const base = {
|
|
15
|
+
padding: "12px 16px",
|
|
16
|
+
minWidth: "140px",
|
|
17
|
+
borderRadius: "12px",
|
|
18
|
+
border: "1px solid #f43f5e",
|
|
19
|
+
backgroundColor: "#fff1f2",
|
|
20
|
+
transition: "all 0.2s"
|
|
21
|
+
};
|
|
22
|
+
if (props.selected) {
|
|
23
|
+
base.border = "2px solid #f43f5e";
|
|
24
|
+
base.boxShadow = "0 0 12px rgba(244, 63, 94, 0.4)";
|
|
25
|
+
}
|
|
26
|
+
return { ...base, ...props.style };
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<div :class="['ai-condition-node', {
|
|
32
|
+
selected,
|
|
33
|
+
dragging
|
|
34
|
+
}]" :style="nodeStyle">
|
|
35
|
+
<div
|
|
36
|
+
v-if="connectable"
|
|
37
|
+
class="ai-handle ai-handle-target"
|
|
38
|
+
data-handle-type="target"
|
|
39
|
+
data-handle-position="left"
|
|
40
|
+
/>
|
|
41
|
+
<div class="ai-node-header">
|
|
42
|
+
<span class="ai-node-icon">🔀</span>
|
|
43
|
+
<span class="ai-node-title">{{ label || data?.label || '条件分支' }}</span>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="ai-node-body">
|
|
46
|
+
<div class="ai-node-condition">{{ data?.condition || "\u8BBE\u7F6E\u6761\u4EF6..." }}</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div
|
|
49
|
+
v-if="connectable"
|
|
50
|
+
class="ai-handle ai-handle-source"
|
|
51
|
+
data-handle-type="source"
|
|
52
|
+
data-handle-position="right"
|
|
53
|
+
/>
|
|
54
|
+
<div
|
|
55
|
+
v-if="connectable"
|
|
56
|
+
class="ai-handle ai-handle-source-bottom"
|
|
57
|
+
data-handle-type="source"
|
|
58
|
+
data-handle-position="bottom"
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
</template>
|
|
62
|
+
|
|
63
|
+
<style scoped>
|
|
64
|
+
.ai-condition-node{cursor:pointer;display:inline-block;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ai-condition-node.dragging{cursor:grabbing;z-index:100}.ai-node-header{align-items:center;display:flex;gap:6px;margin-bottom:8px}.ai-node-icon{font-size:16px}.ai-node-title{color:#e11d48;font-size:13px;font-weight:600}.ai-node-body{font-size:12px}.ai-node-condition{background:#ffe4e6;border-radius:4px;color:#be123c;display:inline-block;overflow:hidden;padding:2px 8px;text-overflow:ellipsis;white-space:nowrap}.ai-handle{background:#f43f5e;border:2px solid #fff;border-radius:50%;cursor:crosshair;height:12px;position:absolute;width:12px;z-index:20}.ai-handle-target{left:-8px;top:50%;transform:translateY(-50%)}.ai-handle-source{right:-8px;top:50%;transform:translateY(-50%)}.ai-handle-source-bottom{bottom:-8px;left:50%;transform:translateX(-50%)}
|
|
65
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
connectable: boolean;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
dragging: boolean;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
connectable: boolean;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
dragging: boolean;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
id: { type: String, required: true },
|
|
5
|
+
type: { type: String, required: true },
|
|
6
|
+
data: { type: Object, required: true },
|
|
7
|
+
selected: { type: Boolean, required: true, default: false },
|
|
8
|
+
dragging: { type: Boolean, required: true, default: false },
|
|
9
|
+
connectable: { type: Boolean, required: true, default: true },
|
|
10
|
+
style: { type: Object, required: false, default: () => ({}) },
|
|
11
|
+
label: { type: String, required: false, default: "\u7ED3\u675F" }
|
|
12
|
+
});
|
|
13
|
+
const nodeStyle = computed(() => {
|
|
14
|
+
const base = {
|
|
15
|
+
width: "48px",
|
|
16
|
+
height: "48px",
|
|
17
|
+
borderRadius: "50%",
|
|
18
|
+
border: "3px solid #ef4444",
|
|
19
|
+
backgroundColor: "#fef2f2",
|
|
20
|
+
display: "flex",
|
|
21
|
+
alignItems: "center",
|
|
22
|
+
justifyContent: "center",
|
|
23
|
+
transition: "all 0.2s"
|
|
24
|
+
};
|
|
25
|
+
if (props.selected) {
|
|
26
|
+
base.border = "4px solid #ef4444";
|
|
27
|
+
base.boxShadow = "0 0 12px rgba(239, 68, 68, 0.5)";
|
|
28
|
+
}
|
|
29
|
+
return { ...base, ...props.style };
|
|
30
|
+
});
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<template>
|
|
34
|
+
<div :class="['ai-end-node', { selected, dragging }]" :style="nodeStyle">
|
|
35
|
+
<span class="ai-end-icon">■</span>
|
|
36
|
+
<div
|
|
37
|
+
v-if="connectable"
|
|
38
|
+
class="ai-handle ai-handle-target"
|
|
39
|
+
data-handle-type="target"
|
|
40
|
+
data-handle-position="left"
|
|
41
|
+
/>
|
|
42
|
+
</div>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<style scoped>
|
|
46
|
+
.ai-end-node{cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ai-end-node.dragging{cursor:grabbing;z-index:100}.ai-end-icon{color:#dc2626;font-size:16px}.ai-handle{background:#ef4444;border:2px solid #fff;border-radius:50%;cursor:crosshair;height:12px;position:absolute;width:12px;z-index:20}.ai-handle-target{left:-8px;top:50%;transform:translateY(-50%)}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
connectable: boolean;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
dragging: boolean;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeStyle, NodeData } from '../../../types';
|
|
2
|
+
interface Props {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: NodeData;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
dragging: boolean;
|
|
8
|
+
connectable: boolean;
|
|
9
|
+
style?: NodeStyle;
|
|
10
|
+
label?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
label: string;
|
|
14
|
+
style: NodeStyle;
|
|
15
|
+
connectable: boolean;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
dragging: boolean;
|
|
18
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
export default _default;
|