diff --git a/.changeset/perfect-coins-rest.md b/.changeset/perfect-coins-rest.md
new file mode 100644
index 000000000..e3613515d
--- /dev/null
+++ b/.changeset/perfect-coins-rest.md
@@ -0,0 +1,5 @@
+---
+"@vue-flow/core": minor
+---
+
+Expose `wheelDelta` utility fn
diff --git a/.changeset/quick-dolphins-juggle.md b/.changeset/quick-dolphins-juggle.md
new file mode 100644
index 000000000..c5d5591ab
--- /dev/null
+++ b/.changeset/quick-dolphins-juggle.md
@@ -0,0 +1,5 @@
+---
+"@vue-flow/minimap": patch
+---
+
+Apply wheelDelta to zoom
diff --git a/examples/vite/src/Basic/CustomNode.vue b/examples/vite/src/Basic/CustomNode.vue
new file mode 100644
index 000000000..6a7ff6fe3
--- /dev/null
+++ b/examples/vite/src/Basic/CustomNode.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+ Custom
+
+
+
+
diff --git a/packages/core/src/container/Viewport/Viewport.vue b/packages/core/src/container/Viewport/Viewport.vue
index 3d98d0fab..a5c14c287 100644
--- a/packages/core/src/container/Viewport/Viewport.vue
+++ b/packages/core/src/container/Viewport/Viewport.vue
@@ -8,7 +8,7 @@ import { PanOnScrollMode } from '../../types'
import { useKeyPress } from '../../composables/useKeyPress'
import { useVueFlow } from '../../composables/useVueFlow'
import { useResizeHandler } from '../../composables/useResizeHandler'
-import { clamp, isMacOs, warn } from '../../utils'
+import { clamp, isMacOs, warn, wheelDelta } from '../../utils'
import Pane from '../Pane/Pane.vue'
import Transform from './Transform.vue'
@@ -380,12 +380,6 @@ function isRightClickPan(pan: boolean | number[], usedButton: number) {
return usedButton === 2 && Array.isArray(pan) && pan.includes(2)
}
-function wheelDelta(event: any) {
- const factor = event.ctrlKey && isMacOs() ? 10 : 1
-
- return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor
-}
-
function viewChanged(prevViewport: ViewportTransform, eventTransform: ZoomTransform) {
return (
(prevViewport.x !== eventTransform.x && !Number.isNaN(eventTransform.x)) ||
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index 782f2ed2b..a5b9c50ad 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -48,6 +48,7 @@ export {
getBoundsofRects,
connectionExists,
clamp,
+ wheelDelta,
} from './utils/graph'
/**
diff --git a/packages/core/src/utils/graph.ts b/packages/core/src/utils/graph.ts
index 209709b76..60b185575 100644
--- a/packages/core/src/utils/graph.ts
+++ b/packages/core/src/utils/graph.ts
@@ -21,7 +21,7 @@ import type {
XYPosition,
XYZPosition,
} from '../types'
-import { isDef, snapPosition, warn } from '.'
+import { isDef, isMacOs, snapPosition, warn } from '.'
export function nodeToRect(node: GraphNode): Rect {
return {
@@ -504,3 +504,9 @@ export function getMarkerId(marker: EdgeMarkerType | undefined, vueFlowId?: stri
.map((key) => `${key}=${marker[key]}`)
.join('&')}`
}
+
+export function wheelDelta(event: any) {
+ const factor = event.ctrlKey && isMacOs() ? 10 : 1
+
+ return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor
+}
diff --git a/packages/minimap/src/MiniMap.vue b/packages/minimap/src/MiniMap.vue
index 52ad94a52..af06395a8 100644
--- a/packages/minimap/src/MiniMap.vue
+++ b/packages/minimap/src/MiniMap.vue
@@ -1,6 +1,6 @@