@@ -4,7 +4,7 @@ import { Canvas } from "@/src/components/ai-elements/canvas"
44import { Connection } from "@/src/components/ai-elements/connection"
55import { Controls } from "@/src/components/ai-elements/controls"
66import { Edge } from "@/src/components/ai-elements/edge"
7- import { useWorkflowContext , type WorkflowProgressEvent } from "@/app/workflows/providers/workflow-context"
7+ import { useWorkflowContext } from "@/app/workflows/providers/workflow-context"
88import { workflowNodeTypes } from "./workflow-node"
99import { WorkflowInfoPanel } from "./workflow-info-panel"
1010import { WorkflowLegend } from "./workflow-legend"
@@ -13,6 +13,7 @@ import { WorkflowOutput } from "./workflow-output"
1313import { WorkflowInputPanel } from "./workflow-input-panel"
1414import { WorkflowProgressPanel } from "./workflow-progress-panel"
1515import { WorkflowSuspendDialog } from "./workflow-suspend-dialog"
16+ import { MiniMap , Panel , Background , BackgroundVariant } from "@xyflow/react"
1617import type { ReactNode } from "react"
1718
1819const edgeTypes = {
@@ -25,20 +26,76 @@ interface WorkflowCanvasProps {
2526}
2627
2728export function WorkflowCanvas ( { children } : WorkflowCanvasProps ) {
28- const { nodes, edges } = useWorkflowContext ( )
29+ const {
30+ nodes,
31+ edges,
32+ workflowConfig,
33+ onNodesChange,
34+ onEdgesChange
35+ } = useWorkflowContext ( )
2936
3037 return (
31- < div className = "flex-1" >
38+ < div className = "flex-1 relative noise overflow-hidden mesh-gradient " >
3239 < Canvas
3340 nodes = { nodes }
3441 edges = { edges }
42+ onNodesChange = { onNodesChange }
43+ onEdgesChange = { onEdgesChange }
3544 nodeTypes = { workflowNodeTypes }
3645 edgeTypes = { edgeTypes }
3746 connectionLineComponent = { Connection }
3847 fitView
3948 fitViewOptions = { { padding : 0.3 } }
49+ snapToGrid
50+ snapGrid = { [ 20 , 20 ] }
51+ defaultEdgeOptions = { {
52+ type : "animated" ,
53+ animated : true ,
54+ } }
4055 >
41- < Controls />
56+ < Background
57+ variant = { BackgroundVariant . Dots }
58+ gap = { 20 }
59+ size = { 1 }
60+ color = "oklch(var(--primary) / 0.1)"
61+ />
62+ < Controls showInteractive = { false } className = "bg-background/80 backdrop-blur-md border-border/50 shadow-xl" />
63+ < MiniMap
64+ zoomable
65+ pannable
66+ className = "!bg-card/60 !backdrop-blur-xl !border-border/30 rounded-2xl shadow-2xl !bottom-4 !right-4 overflow-hidden"
67+ nodeStrokeWidth = { 3 }
68+ maskColor = "oklch(var(--background) / 0.6)"
69+ nodeColor = { ( n ) => {
70+ if ( n . data ?. status === "completed" ) { return "oklch(0.7 0.15 150)" }
71+ if ( n . data ?. status === "running" ) { return "oklch(0.7 0.2 60)" }
72+ if ( n . data ?. status === "error" ) { return "oklch(0.6 0.2 20)" }
73+ return "oklch(0.7 0 0 / 0.2)"
74+ } }
75+ />
76+ < Panel position = "bottom-left" className = "bg-background/40 backdrop-blur-xl border-border/20 rounded-full px-4 py-1.5 text-[10px] text-muted-foreground uppercase font-bold tracking-[0.2em] shadow-lg animate-fade-in" >
77+ < span className = "flex items-center gap-2" >
78+ < div className = "size-1.5 bg-primary rounded-full animate-pulse" />
79+ { workflowConfig ?. name } • CORE ENGINE 2026
80+ </ span >
81+ </ Panel >
82+
83+ { /* Floating status display */ }
84+ < Panel position = "top-left" className = "bg-card/30 backdrop-blur-2xl border-border/10 rounded-xl p-3 shadow-2xl mt-16 max-w-xs animate-in slide-in-from-left-4 duration-500" >
85+ < div className = "flex items-center gap-3 mb-2" >
86+ < div className = "size-8 rounded-lg bg-primary/10 flex items-center justify-center" >
87+ < div className = "size-4 text-primary" > ⚙️</ div >
88+ </ div >
89+ < div >
90+ < p className = "text-[10px] font-bold text-primary uppercase tracking-widest" > Active Runtime</ p >
91+ < p className = "text-xs font-semibold truncate" > { workflowConfig ?. id } </ p >
92+ </ div >
93+ </ div >
94+ < p className = "text-[11px] text-muted-foreground leading-relaxed italic" >
95+ { workflowConfig ?. description }
96+ </ p >
97+ </ Panel >
98+
4299 < WorkflowProgressPanel />
43100 < WorkflowInfoPanel />
44101 < WorkflowLegend />
0 commit comments