Skip to content

Flow API Reference

Component

<yh-flow />

The core component is exported as Flow and registered as yh-flow in docs.

Props

From packages/flow/src/Flow.vue.

PropTypeDescription
nodesNode[]Node list (recommended with width/height)
edgesEdge[]Edge list
modelValueViewportTransformViewport (x/y/zoom)
minZoomnumberMinimum zoom
maxZoomnumberMaximum zoom
zoomStepnumberZoom step
nodesDraggablebooleanWhether nodes are draggable (disabled in readonly mode)
edgesConnectablebooleanWhether new connections are allowed
selectablebooleanWhether selection / box selection is enabled
background'none' | 'dots' | 'grid'Background type
backgroundColorstringBackground color
gridSizenumberGrid size
snapToGridbooleanSnap to grid
snapGrid[number, number]Snap granularity
readonlybooleanReadonly mode
showControlsbooleanShow Controls
showMinimapbooleanShow Minimap
minimapNodeColorstringMinimap node color
historybooleanEnable undo/redo history
maxHistorynumberMax history size
keyboardShortcutsbooleanEnable shortcuts
connectionValidator(connection) => booleanCustom connection validator
noCycleValidationbooleanDisable cycle validation
showAlignmentLinesbooleanShow alignment lines
snapThresholdnumberSnap threshold (px)
nodeTypesNodeTypesCustom node type mapping
edgeTypesEdgeTypesCustom edge type mapping
customNodeTemplatesRecord<string, any>Node templates for quick creation
interactiveMinimapbooleanEnable interactive minimap
showLayoutControlsbooleanShow layout buttons in minimap
layoutTypeLayoutTypeCurrent layout algorithm (dagre/elk/force/grid)
layoutDirection'TB' | 'BT' | 'LR' | 'RL'Layout direction
enableExportbooleanEnable export feature
exportFileNamestringDefault filename prefix for export

Events

EventPayloadDescription
update:modelValue(value: ViewportTransform)Viewport changed (v-model)
update:nodes(nodes: Node[])Nodes changed (reserved)
update:edges(edges: Edge[])Edges changed (reserved)
nodeClick{ node, nativeEvent }Node click
nodeDblClick{ node, nativeEvent }Node double click
nodeDragStart{ node, nativeEvent }Drag start
nodeDrag{ node, nativeEvent, position }Dragging
nodeDragEnd{ node, nativeEvent }Drag end
nodeContextMenu{ node, nativeEvent }Context menu
edgeClick{ edge, nativeEvent }Edge click
edgeDblClick{ edge, nativeEvent }Edge double click
edgeContextMenu{ edge, nativeEvent }Context menu
edgeConnectConnectionConnection created
selectionChange{ selectedNodes, selectedEdges }Selection changed
historyChange{ canUndo, canRedo }History status changed
viewportChangeViewportTransformViewport changed
edgeUpdate{ edge, connection }Edge updated (source/target changed)

Instance Methods (FlowInstance)

Methods accessible via the component ref:

MethodTypeDescription
addNode(node: Node) => voidAdd a node
removeNode(id: string) => voidRemove a node
updateNode(id: string, data: Partial<Node>) => voidUpdate node data
addEdge(edge: Edge) => voidAdd an edge
removeEdge(id: string) => voidRemove an edge
updateEdge(id: string, data: Partial<Edge>) => voidUpdate edge data
fitView(options?: FitViewOptions) => voidFit view to nodes
zoomIn(factor?: number) => voidZoom in
zoomOut(factor?: number) => voidZoom out
setViewport(vp: ViewportTransform) => voidSet viewport transform
screenToCanvas(x, y) => {x, y}Screen to canvas coordinates
canvasToScreen(x, y) => {x, y}Canvas to screen coordinates
usePlugin(plugin: FlowPlugin) => voidRegister a plugin
removePlugin(id: string) => voidUnregister a plugin
getNode(id: string) => NodeGet node instance by ID
getEdge(id: string) => EdgeGet edge instance by ID
getNodes() => Node[]Get current nodes
getEdges() => Edge[]Get current edges
getViewport() => ViewportTransformGet current viewport transform
centerView() => voidCenter the view
selectNode(id: string) => voidSelect a node
selectEdge(id: string) => voidSelect an edge
clearSelection() => voidClear all selections
on / off(event, callback) => voidEvent subscribe/unsubscribe
emit(event, payload) => voidEmit internal events
exportFlowData(vp?) => stringExport canvas data
importFlowData(json: string) => voidImport canvas data
isNestedNode(node: Node) => booleanCheck if node is nested
getNodeChildren(node: Node) => Node[]Get child nodes
getNodeParent(node: Node) => NodeGet parent node
isValidConnection(conn: Connection) => booleanValidate connection
createNodeFromTemplate(type, id, pos, data?) => NodeCreate node from template
draggingNodeIdRef<string | null>Current dragging node ID
draggingPositionRef<{x, y} | null>Current dragging canvas position
$elHTMLElementGet Flow container DOM element

Composables

@yh-ui/flow exports core composables: useViewport, useNodes, useEdges, useSelection, useHistory, useKeyboard, etc.

Plugin System (for plugin authors)

Flow provides a FlowInstance via FlowContext (see packages/flow/src/plugins/plugin.ts), including:

  • State: nodes / edges / viewport
  • Actions: addNode/removeNode/updateNode/getNode, addEdge/removeEdge/updateEdge/getEdge, setViewport/fitView/zoomIn/zoomOut/centerView
  • Events: on/off/emit
  • Plugin management: usePlugin/removePlugin

Common event keys (excerpt):

  • node:click / node:drag / node:selected
  • edge:click / edge:connect / edge:selected
  • viewport:change
  • selection:change

Benchmark

  • Flow - Performance Benchmark: /en/flow/benchmark

Released under the MIT License.