import { computed, defineComponent, onBeforeUnmount, PropType, provide, watch } from 'vue'; import '../../style.css'; import '../../theme-default.css'; import GraphView from '../GraphView'; import DefaultNode from '../../components/Nodes/DefaultNode'; import InputNode from '../../components/Nodes/InputNode'; import OutputNode from '../../components/Nodes/OutputNode'; import { createNodeTypes } from '../NodeRenderer/utils'; import { BezierEdge, StepEdge, SmoothStepEdge, StraightEdge } from '../../components/Edges'; import { createEdgeTypes } from '../EdgeRenderer/utils'; import { ConnectionMode, ConnectionLineType, PanOnScrollMode, RevueFlowStore, RevueFlowProps } from '../../types'; import { initialState } from '../../store'; import configureStore from '../../store/configure-store'; const defaultNodeTypes = { input: InputNode, default: DefaultNode, output: OutputNode }; const defaultEdgeTypes = { default: BezierEdge, straight: StraightEdge, step: StepEdge, smoothstep: SmoothStepEdge }; const RevueFlow = defineComponent({ name: 'RevueFlow', components: { GraphView }, props: { elements: { type: Array as PropType, required: true }, nodeTypesId: { type: String as PropType, required: false, default: '1' }, edgeTypesId: { type: String as PropType, required: false, default: '1' }, nodeTypes: { type: Object as PropType, required: false, default: () => defaultNodeTypes }, edgeTypes: { type: Object as PropType, required: false, default: () => defaultEdgeTypes }, onMove: { type: Function as unknown as PropType, required: false, default: undefined }, onMoveStart: { type: Function as unknown as PropType, required: false, default: undefined }, onMoveEnd: { type: Function as unknown as PropType, required: false, default: undefined }, onLoad: { type: Function as unknown as PropType, required: false, default: undefined }, onElementClick: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeDoubleClick: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeDoubleClick: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeMouseEnter: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeMouseMove: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeMouseLeave: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeContextMenu: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeDragStart: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeDrag: { type: Function as unknown as PropType, required: false, default: undefined }, onNodeDragStop: { type: Function as unknown as PropType, required: false, default: undefined }, onSelectionContextMenu: { type: Function as unknown as PropType, required: false, default: undefined }, onElementsRemove: { type: Function as unknown as PropType, required: false, default: undefined }, onConnect: { type: Function as unknown as PropType, required: false, default: undefined }, onConnectStart: { type: Function as unknown as PropType, required: false, default: undefined }, onConnectStop: { type: Function as unknown as PropType, required: false, default: undefined }, onConnectEnd: { type: Function as unknown as PropType, required: false, default: undefined }, connectionMode: { type: String as PropType, required: false, default: ConnectionMode.Strict }, connectionLineType: { type: String as PropType, required: false, default: ConnectionLineType.Bezier }, connectionLineStyle: { type: Object as PropType, required: false, default: undefined }, connectionLineComponent: { type: Object as PropType, required: false, default: undefined }, selectionKeyCode: { type: [Number, String] as PropType, required: false, default: 'Shift' }, multiSelectionKeyCode: { type: [Number, String] as PropType, required: false, default: 'Meta' }, zoomActivationKeyCode: { type: [Number, String] as PropType, required: false, default: 'Meta' }, deleteKeyCode: { type: [Number, String] as PropType, required: false, default: 'Backspace' }, snapToGrid: { type: Boolean as PropType, required: false, default: false }, snapGrid: { type: Array as unknown as PropType, required: false, default: () => [15, 15] }, onlyRenderVisibleElements: { type: Boolean as PropType, required: false, default: false }, nodesDraggable: { type: Boolean as PropType, required: false, default: undefined }, nodesConnectable: { type: Boolean as PropType, required: false, default: undefined }, elementsSelectable: { type: Boolean as PropType, required: false, default: undefined }, selectNodesOnDrag: { type: Boolean as PropType, required: false, default: true }, minZoom: { type: Number as PropType, required: false, default: undefined }, maxZoom: { type: Number as PropType, required: false, default: undefined }, defaultZoom: { type: Number as PropType, required: false, default: 1 }, defaultPosition: { type: Array as unknown as PropType, required: false, default: () => [0, 0] }, translateExtent: { type: Array as unknown as PropType, required: false, default: undefined }, nodeExtent: { type: Array as unknown as PropType, required: false, default: undefined }, arrowHeadColor: { type: String as PropType, required: false, default: '#b1b1b7' }, markerEndId: { type: String as PropType, required: false, default: undefined }, zoomOnScroll: { type: Boolean as PropType, required: false, default: true }, zoomOnPinch: { type: Boolean as PropType, required: false, default: true }, panOnScroll: { type: Boolean as PropType, required: false, default: false }, panOnScrollSpeed: { type: Number as PropType, required: false, default: 0.5 }, panOnScrollMode: { type: String as PropType, required: false, default: PanOnScrollMode.Free }, zoomOnDoubleClick: { type: Boolean as PropType, required: false, default: true }, paneMoveable: { type: Boolean as PropType, required: false, default: true }, onPaneClick: { type: Function as unknown as PropType, required: false, default: undefined }, onPaneScroll: { type: Function as unknown as PropType, required: false, default: undefined }, onPaneContextMenu: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeUpdate: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeMouseEnter: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeContextMenu: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeMouseMove: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeMouseLeave: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeUpdateEnd: { type: Function as unknown as PropType, required: false, default: undefined }, onEdgeUpdateStart: { type: Function as unknown as PropType, required: false, default: undefined }, onSelectionDragStart: { type: Function as unknown as PropType, required: false, default: undefined }, onSelectionDrag: { type: Function as unknown as PropType, required: false, default: undefined }, onSelectionDragStop: { type: Function as unknown as PropType, required: false, default: undefined }, onSelectionChange: { type: Function as unknown as PropType, required: false, default: undefined }, edgeUpdaterRadius: { type: Number as PropType, required: false, default: 10 }, onDrop: { type: Function as unknown as PropType<(e: DragEvent) => any>, required: false, default: undefined }, onDragover: { type: Function as unknown as PropType<(e: DragEvent) => any>, required: false, default: undefined } /* // focus events onFocus: FocusEvent, onFocusin: FocusEvent, onFocusout: FocusEvent, onBlur: FocusEvent, // keyboard events onKeydown: KeyboardEvent, onKeypress: KeyboardEvent, onKeyup: KeyboardEvent, // mouse events onAuxclick: MouseEvent, onClick: MouseEvent, onContextmenu: MouseEvent, onDblclick: MouseEvent, onMousedown: MouseEvent, onMouseenter: MouseEvent, onMouseleave: MouseEvent, onMousemove: MouseEvent, onMouseout: MouseEvent, onMouseover: MouseEvent, onMouseup: MouseEvent, // selection events onSelect: Event, // UI events onScroll: UIEvent, // touch events onTouchcancel: TouchEvent, onTouchend: TouchEvent, onTouchmove: TouchEvent, onTouchstart: TouchEvent, // pointer events onPointerdown: PointerEvent, onPointermove: PointerEvent, onPointerup: PointerEvent, onPointercancel: PointerEvent, onPointerenter: PointerEvent, onPointerleave: PointerEvent, onPointerover: PointerEvent, onPointerout: PointerEvent, // wheel events onWheel: WheelEvent, // transition events onTransitionend: TransitionEvent, onTransitionstart: TransitionEvent, */ }, setup(props, { slots }) { const store = configureStore(initialState)(); provide('store', store); store.setElements(props.elements); watch(props, () => { store.setElements(props.elements); }); onBeforeUnmount(() => { store.$reset(); store.setElements([]); }); const nodeTypesParsed = computed(() => props.nodeTypes && createNodeTypes(props.nodeTypes)); const edgeTypesParsed = computed(() => props.edgeTypes && createEdgeTypes(props.edgeTypes)); return () => (
{slots.default ? slots.default() : ''}
); } }); export default RevueFlow;