diff --git a/web/app/dashboard/ai-workflows/_components/flowgram-editor-provider.tsx b/web/app/dashboard/ai-workflows/_components/flowgram-editor-provider.tsx
index 2f36d5c..a7ba0f5 100644
--- a/web/app/dashboard/ai-workflows/_components/flowgram-editor-provider.tsx
+++ b/web/app/dashboard/ai-workflows/_components/flowgram-editor-provider.tsx
@@ -6,6 +6,8 @@ import {
type FreeLayoutProps,
type WorkflowJSON,
} from "@flowgram.ai/free-layout-editor"
+import { createFreeSnapPlugin } from "@flowgram.ai/free-snap-plugin"
+import { createMinimapPlugin } from "@flowgram.ai/minimap-plugin"
import type { AIWorkflowDefinition, AIWorkflowNodeSpec } from "@/lib/api/admin"
@@ -29,11 +31,17 @@ export function useFlowgramEditorProps({
readonly,
initialData: definition as WorkflowJSON,
nodeRegistries: buildFlowgramNodeRegistries(nodeSpecs),
+ fromNodeJSON(_node, json) {
+ return json
+ },
+ toNodeJSON(_node, json) {
+ return json
+ },
materials: {
renderDefaultNode: FlowgramNodeRenderer,
},
nodeEngine: {
- enable: false,
+ enable: true,
},
history: {
enable: !readonly,
@@ -61,7 +69,35 @@ export function useFlowgramEditorProps({
},
}
},
- plugins: () => [],
+ plugins: () => [
+ createMinimapPlugin({
+ disableLayer: true,
+ canvasStyle: {
+ canvasWidth: 150,
+ canvasHeight: 84,
+ canvasPadding: 48,
+ canvasBackground: "rgba(245, 245, 245, 1)",
+ canvasBorderRadius: 8,
+ viewportBackground: "rgba(235, 235, 235, 1)",
+ viewportBorderRadius: 4,
+ viewportBorderColor: "rgba(201, 201, 201, 1)",
+ viewportBorderWidth: 1,
+ viewportBorderDashLength: 2,
+ nodeColor: "rgba(255, 255, 255, 1)",
+ nodeBorderRadius: 2,
+ nodeBorderWidth: 0.145,
+ nodeBorderColor: "rgba(6, 7, 9, 0.10)",
+ overlayColor: "rgba(255, 255, 255, 0)",
+ },
+ }),
+ createFreeSnapPlugin({
+ edgeColor: "#00B2B2",
+ alignColor: "#00B2B2",
+ edgeLineWidth: 1,
+ alignLineWidth: 1,
+ alignCrossWidth: 8,
+ }),
+ ],
}),
[definition, nodeSpecs, onDefinitionChange, readonly]
)
diff --git a/web/app/dashboard/ai-workflows/_components/flowgram-node-registries.tsx b/web/app/dashboard/ai-workflows/_components/flowgram-node-registries.tsx
index 2f5e1c8..5626fc4 100644
--- a/web/app/dashboard/ai-workflows/_components/flowgram-node-registries.tsx
+++ b/web/app/dashboard/ai-workflows/_components/flowgram-node-registries.tsx
@@ -1,4 +1,4 @@
-import type { WorkflowNodeRegistry } from "@flowgram.ai/free-layout-editor"
+import { Field, type WorkflowNodeRegistry } from "@flowgram.ai/free-layout-editor"
import type { AIWorkflowNodeSpec } from "@/lib/api/admin"
@@ -23,13 +23,38 @@ export function buildFlowgramNodeRegistries(nodeSpecs: AIWorkflowNodeSpec[]): Wo
type: spec.type,
meta: {
defaultExpanded: true,
+ isStart: spec.type === "start",
deleteDisable: spec.type === "start" || spec.type === "end",
copyDisable: spec.type === "start" || spec.type === "end",
defaultPorts: defaultPortsForNodeType(spec.type),
},
+ formMeta: {
+ render: () => ,
+ },
}))
}
+function FlowgramNodeForm({
+ nodeType,
+ fallbackTitle,
+}: {
+ nodeType: string
+ fallbackTitle: string
+}) {
+ return (
+
+
name="title">
+ {({ field }) => (
+
+ {field.value || fallbackTitle}
+
+ )}
+
+
{nodeType}
+
+ )
+}
+
function defaultPortsForNodeType(type: string) {
if (type === "start") {
return [{ type: "output" as const }]
diff --git a/web/app/dashboard/ai-workflows/_components/flowgram-node-renderer.tsx b/web/app/dashboard/ai-workflows/_components/flowgram-node-renderer.tsx
index 8480574..031fa64 100644
--- a/web/app/dashboard/ai-workflows/_components/flowgram-node-renderer.tsx
+++ b/web/app/dashboard/ai-workflows/_components/flowgram-node-renderer.tsx
@@ -34,11 +34,9 @@ const iconByType: Record> = {
}
export function FlowgramNodeRenderer(props: WorkflowNodeProps) {
- const { selected, node } = useNodeRender()
+ const { selected, node, form } = useNodeRender()
const nodeType = String(node.flowNodeType ?? "")
const Icon = iconByType[nodeType] ?? BotIcon
- const nodeJSON = node.toJSON?.() as { data?: { title?: string }; title?: string } | undefined
- const title = nodeJSON?.data?.title || nodeJSON?.title || nodeType || "节点"
return (
-
+ {form?.render()}
)
diff --git a/web/app/dashboard/ai-workflows/_components/workflow-config-sidebar.tsx b/web/app/dashboard/ai-workflows/_components/workflow-config-sidebar.tsx
index 063f1ff..9994b9a 100644
--- a/web/app/dashboard/ai-workflows/_components/workflow-config-sidebar.tsx
+++ b/web/app/dashboard/ai-workflows/_components/workflow-config-sidebar.tsx
@@ -34,7 +34,7 @@ export function WorkflowConfigSidebar({
: []
return (
-