<script lang="ts" setup>
import { Panel, VueFlow, useVueFlow } from '@vue-flow/core'
import { Controls } from '@vue-flow/controls'
import { MiniMap } from '@vue-flow/minimap'
const {
nodesDraggable,
nodesConnectable,
elementsSelectable,
zoomOnScroll,
zoomOnDoubleClick,
zoomOnPinch,
panOnScroll,
panOnScrollMode,
panOnDrag,
onConnect,
onNodeDragStart,
onNodeDragStop,
onPaneClick,
onPaneScroll,
onPaneContextMenu,
onMoveEnd,
addEdges,
} = useVueFlow({
modelValue: [
{ id: '1', type: 'input', label: 'Node 1', position: { x: 250, y: 5 } },
{ id: '2', label: 'Node 2', position: { x: 100, y: 100 } },
{ id: '3', label: 'Node 3', position: { x: 400, y: 100 } },
{ id: '4', label: 'Node 4', position: { x: 400, y: 200 } },
{ id: 'e1-2', source: '1', target: '2', animated: true },
{ id: 'e1-3', source: '1', target: '3' },
],
})
const captureZoomClick = ref(false)
const captureZoomScroll = ref(false)
onConnect(addEdges)
onNodeDragStart((e) => console.log('drag start', e))
onNodeDragStop((e) => console.log('drag stop', e))
onPaneClick((event) => captureZoomClick.value && console.log('pane click', event))
onPaneScroll((event) => captureZoomScroll.value && console.log('pane scroll', event))
onPaneContextMenu((event) => console.log('pane ctx menu', event))
onMoveEnd((flowTransform) => console.log('move end', flowTransform))
</script>
<template>
<VueFlow>
<MiniMap />
<Controls />
<Panel position="top-left">
<div>
<label for="draggable">
nodesDraggable
<input id="draggable" v-model="nodesDraggable" type="checkbox" />
</label>
</div>
<div>
<label for="connectable">
nodesConnectable
<input id="connectable" v-model="nodesConnectable" type="checkbox" />
</label>
</div>
<div>
<label for="selectable">
elementsSelectable
<input id="selectable" v-model="elementsSelectable" type="checkbox" />
</label>
</div>
<div>
<label for="zoomonscroll">
zoomOnScroll
<input id="zoomonscroll" v-model="zoomOnScroll" type="checkbox" />
</label>
</div>
<div>
<label for="zoomondbl">
zoomOnDoubleClick
<input id="zoomondbl" v-model="zoomOnDoubleClick" type="checkbox" />
</label>
</div>
<div>
<label for="panonscroll">
panOnScroll
<input id="panonscroll" v-model="panOnScroll" type="checkbox" />
</label>
</div>
<div>
<label>
panOnScrollMode
<select v-model="panOnScrollMode">
<option value="free">free</option>
<option value="horizontal">horizontal</option>
<option value="vertical">vertical</option>
</select>
</label>
</div>
<div>
<label for="panemoveable">
panOnDrag
<input id="panemoveable" v-model="panOnDrag" type="checkbox" />
</label>
</div>
</Panel>
</VueFlow>
</template>