Overview
Flow Canvas is a thin wrapper around React Flow (@xyflow/react). It ships with:
- a draggable FlowPanel to add nodes by drag or click
- custom nodeTypes and edgeTypes with labeled handles
- a DataEdge that can render a value from the source node’s
data - desktop-only MiniMap and Controls (auto-hidden on mobile)
You manage nodes and edges with React Flow’s controlled hooks and optional drag-to-create behavior.
Exports
Canvas: FlowCanvas – ready-to-use canvas with initial nodes/edges, drag-drop, minimap, controls
Panel: FlowPanel – small launcher palette for nodes plus toggles for minimap/controls
Nodes: BaseNode, LabeledHandle, NodeHeader, NodeHeaderTitle, NodeHeaderActions, NodeHeaderAction, NodeHeaderMenuAction, NodeHeaderDeleteAction
Edges: DataEdge (reads a key from the source node’s data), edgeTypes
State: initialNodes, initialEdges, nodeTypes
Usage
Drop the canvas anywhere in your page. It enables pan/zoom, selection, and fit-view. The panel appears in the top-right.
'use client';
import * as React from 'react';
import { FlowCanvas } from '@/components/FlowCanvas';
export default function Demo() {
return (
<div className="h-[600px] w-full rounded-2xl overflow-hidden">
<FlowCanvas />
</div>
);
}DataEdge
DataEdge accepts an optional data.key. When present, the edge renders that field from the source node’s data as an inline label. Hover replaces the label with a small delete control. You can switch the path style via data.path (bezier, smoothstep, step, or straight).
Drag and drop
The panel lets you add nodes by dragging from the palette or clicking a button. Drag uses the standard dataTransfer key (application/reactflow), then converts screen position to flow coordinates with reactFlowInstance.screenToFlowPosition.
Mobile behavior
On small screens the canvas disables scroll-to-pan and selection-on-drag by default and hides minimap and controls. Users can toggle them back on via FlowPanel.