import cc from 'classcat'; import React, { forwardRef } from 'react'; import Attribution from '../../components/Attribution'; import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; import DefaultNode from '../../components/Nodes/DefaultNode'; import InputNode from '../../components/Nodes/InputNode'; import OutputNode from '../../components/Nodes/OutputNode'; import SelectionListener from '../../components/SelectionListener'; import StoreUpdater from '../../components/StoreUpdater'; import css from '../../style.css'; import theme from '../../theme-default.css'; import { ConnectionLineType, ConnectionMode, EdgeTypes, EdgeTypesWrapped, NodeTypes, NodeTypesWrapped, PanOnScrollMode, ReactFlowProps, ReactFlowRefType, } from '../../types'; import { createEdgeTypes } from '../EdgeRenderer/utils'; import GraphView from '../GraphView'; import { createNodeTypes } from '../NodeRenderer/utils'; import { injectStyle, useNodeOrEdgeTypes } from './utils'; import Wrapper from './Wrapper'; if (__INJECT_STYLES__) { injectStyle(css as unknown as string); injectStyle(theme as unknown as string); } const defaultNodeTypes: NodeTypes = { input: InputNode, default: DefaultNode, output: OutputNode, }; const defaultEdgeTypes: EdgeTypes = { default: BezierEdge, straight: StraightEdge, step: StepEdge, smoothstep: SmoothStepEdge, simplebezier: SimpleBezierEdge, }; const initSnapGrid: [number, number] = [15, 15]; const initDefaultPosition: [number, number] = [0, 0]; const ReactFlow = forwardRef( ( { nodes, edges, defaultNodes, defaultEdges, className, nodeTypes = defaultNodeTypes, edgeTypes = defaultEdgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectStop, onConnectEnd, onClickConnectStart, onClickConnectStop, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, connectionMode = ConnectionMode.Strict, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = 'Backspace', selectionKeyCode = 'Shift', multiSelectionKeyCode = 'Meta', zoomActivationKeyCode = 'Meta', snapToGrid = false, snapGrid = initSnapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag = true, nodesDraggable, nodesConnectable, elementsSelectable, minZoom, maxZoom, defaultZoom = 1, defaultPosition = initDefaultPosition, translateExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = '#b1b1b7', zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneScroll, onPaneContextMenu, children, onEdgeUpdate, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeUpdateStart, onEdgeUpdateEnd, edgeUpdaterRadius = 10, onNodesChange, onEdgesChange, noDragClassName = 'nodrag', noWheelClassName = 'nowheel', noPanClassName = 'nopan', fitView = false, fitViewOptions, connectOnClick = true, attributionPosition, proOptions, defaultEdgeOptions, elevateEdgesOnSelect = false, ...rest }, ref ) => { const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes) as NodeTypesWrapped; const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes) as EdgeTypesWrapped; const reactFlowClasses = cc(['react-flow', className]); return (
{onSelectionChange && } {children}
); } ); ReactFlow.displayName = 'ReactFlow'; export default ReactFlow;