diff --git a/packages/vue-flow/src/components/UserSelection/UserSelection.vue b/packages/vue-flow/src/components/UserSelection/UserSelection.vue
index bb9813eb..2f532b10 100644
--- a/packages/vue-flow/src/components/UserSelection/UserSelection.vue
+++ b/packages/vue-flow/src/components/UserSelection/UserSelection.vue
@@ -5,11 +5,15 @@ import { getConnectedEdges, getNodesInside } from '../../utils'
import SelectionRect from './SelectionRect.vue'
import { getMousePosition } from './utils'
-const { userSelectionActive, setState, getNodes, getEdges, viewport, addSelectedEdges, addSelectedNodes } = $(useVueFlow())
+const { userSelectionActive, nodesSelectionActive, getNodes, getEdges, viewport, addSelectedEdges, addSelectedNodes } =
+ useVueFlow()
+
const el = templateRef('user-selection', null)
let prevNodes = $ref(0)
+
let prevEdges = $ref(0)
+
const initialRect = () => ({
width: 0,
height: 0,
@@ -27,9 +31,7 @@ const reset = () => {
prevNodes = 0
prevEdges = 0
- setState({
- userSelectionActive: false,
- })
+ userSelectionActive.value = false
}
const onMouseDown = (event: MouseEvent) => {
@@ -46,10 +48,8 @@ const onMouseDown = (event: MouseEvent) => {
draw: true,
}
- setState({
- userSelectionActive: true,
- nodesSelectionActive: false,
- })
+ userSelectionActive.value = true
+ nodesSelectionActive.value = true
}
const onMouseMove = (event: MouseEvent) => {
@@ -69,8 +69,8 @@ const onMouseMove = (event: MouseEvent) => {
height: Math.abs(mousePos.y - startY),
}
- const selectedNodes = getNodesInside(getNodes, rect, viewport)
- const selectedEdges = getConnectedEdges(selectedNodes, getEdges)
+ const selectedNodes = getNodesInside(getNodes.value, rect, viewport.value)
+ const selectedEdges = getConnectedEdges(selectedNodes, getEdges.value)
rect = nextUserSelectRect
@@ -84,31 +84,23 @@ const onMouseMove = (event: MouseEvent) => {
const onMouseUp = () => {
rect = initialRect()
- setState({
- nodesSelectionActive: prevNodes > 0,
- userSelectionActive: false,
- })
+ nodesSelectionActive.value = prevNodes > 0
+ userSelectionActive.value = false
}
const onMouseLeave = () => {
- setState({
- nodesSelectionActive: prevNodes > 0,
- })
+ nodesSelectionActive.value = prevNodes > 0
reset()
}
-onMounted(() => {
- useEventListener(el, 'mousedown', onMouseDown)
- useEventListener(el, 'mousemove', onMouseMove)
- useEventListener(el, 'click', onMouseUp)
- useEventListener(el, 'mouseup', onMouseUp)
- useEventListener(el, 'mouseleave', onMouseLeave)
-})
+useEventListener(el, 'mousedown', onMouseDown)
+useEventListener(el, 'mousemove', onMouseMove)
+useEventListener(el, 'click', onMouseUp)
+useEventListener(el, 'mouseup', onMouseUp)
+useEventListener(el, 'mouseleave', onMouseLeave)
-onBeforeUnmount(() => {
- reset()
-})
+onBeforeUnmount(reset)
diff --git a/packages/vue-flow/src/container/Viewport/Transform.vue b/packages/vue-flow/src/container/Viewport/Transform.vue
index 9bc2febb..f45fd026 100644
--- a/packages/vue-flow/src/container/Viewport/Transform.vue
+++ b/packages/vue-flow/src/container/Viewport/Transform.vue
@@ -4,8 +4,7 @@ import EdgeRenderer from '../EdgeRenderer/EdgeRenderer.vue'
import { useVueFlow, useWindow } from '../../composables'
import type { Dimensions } from '../../types'
-const { id, nodes, edges, viewport, snapToGrid, snapGrid, dimensions, setState, fitViewOnInit, emits, fitView, ...rest } =
- useVueFlow()
+const { id, viewport, dimensions, fitViewOnInit, emits, fitView, ...rest } = useVueFlow()
const untilDimensions = async (dim: Dimensions) => {
// if ssr we can't wait for dimensions, they'll never really exist
@@ -29,13 +28,8 @@ onMounted(async () => {
emits.paneReady({
id,
- nodes,
- edges,
viewport,
- snapToGrid,
- snapGrid,
dimensions,
- setState,
fitViewOnInit,
fitView,
emits,
diff --git a/packages/vue-flow/src/container/Viewport/Viewport.vue b/packages/vue-flow/src/container/Viewport/Viewport.vue
index 466aa021..ec6b7804 100644
--- a/packages/vue-flow/src/container/Viewport/Viewport.vue
+++ b/packages/vue-flow/src/container/Viewport/Viewport.vue
@@ -68,20 +68,20 @@ const stop = watch(
{ immediate: true },
)
-onBeforeUnmount(() => stop())
+const window = useWindow()
+if ('screen' in window) {
+ useEventListener(window, 'resize', () => {
+ if (!viewportEl.value) return
+
+ const { width, height } = getDimensions(viewportEl.value)
+ dimensions.width = width
+ dimensions.height = height
+ })
+}
+
+onBeforeUnmount(stop)
onMounted(() => {
- const window = useWindow()
- if ('screen' in window) {
- useEventListener(window, 'onresize', () => {
- if (!viewportEl.value) return
-
- const { width, height } = getDimensions(viewportEl.value)
- dimensions.width = width
- dimensions.height = height
- })
- }
-
const d3Zoom = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent)
const d3Selection = select(viewportEl.value).call(d3Zoom)
const d3ZoomHandler = d3Selection.on('wheel.zoom')
@@ -132,10 +132,11 @@ onMounted(() => {
watchEffect(() => {
if (panOnScroll && !zoomKeyPressed.value) {
d3Selection
- .on('wheel', (event: any) => {
+ .on('wheel', (event: WheelEvent) => {
if (isWrappedWithClass(event, noWheelClassName?.value)) {
return false
}
+
event.preventDefault()
event.stopImmediatePropagation()
@@ -162,7 +163,7 @@ onMounted(() => {
.on('wheel.zoom', null)
} else if (typeof d3ZoomHandler !== 'undefined') {
d3Selection
- .on('wheel', (event: any) => {
+ .on('wheel', (event: WheelEvent) => {
if (!preventScrolling || isWrappedWithClass(event, noWheelClassName?.value)) {
return null
}