@@ -7,7 +7,7 @@ import { useEventListener, useResizeObserver } from '@vueuse/core'
7
7
import type { CoordinateExtent , D3ZoomHandler , FlowOptions , ViewportTransform } from ' ../../types'
8
8
import { PanOnScrollMode } from ' ../../types'
9
9
import { useKeyPress , useVueFlow , useWindow } from ' ../../composables'
10
- import { ErrorCode , VueFlowError , clamp , getDimensions } from ' ../../utils'
10
+ import { ErrorCode , VueFlowError , clamp , getDimensions , isMacOs } from ' ../../utils'
11
11
import Pane from ' ../Pane/Pane.vue'
12
12
import Transform from ' ./Transform.vue'
13
13
@@ -92,6 +92,7 @@ onMounted(() => {
92
92
93
93
const constrainedTransform = d3Zoom .constrain ()(updatedTransform , extent , translateExtent .value )
94
94
d3Zoom .transform (d3Selection , constrainedTransform )
95
+ d3Zoom .wheelDelta (wheelDelta )
95
96
96
97
storeD3Zoom .value = d3Zoom
97
98
storeD3Selection .value = d3Selection
@@ -183,12 +184,13 @@ onMounted(() => {
183
184
184
185
const currentZoom = d3Selection .property (' __zoom' ).k || 1
185
186
186
- if (event .ctrlKey && zoomOnPinch .value ) {
187
+ if (event .ctrlKey && zoomOnPinch .value && isMacOs () ) {
187
188
const point = pointer (event )
188
- // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js
189
- const pinchDelta = - event .deltaY * (event .deltaMode === 1 ? 0.05 : event .deltaMode ? 1 : 0.002 ) * 10
189
+ const pinchDelta = wheelDelta (event )
190
190
const zoom = currentZoom * 2 ** pinchDelta
191
- d3Zoom .scaleTo (d3Selection , zoom , point )
191
+
192
+ // @ts-expect-error d3-zoom types are not up to date
193
+ d3Zoom .scaleTo (d3Selection , zoom , point , event )
192
194
193
195
return
194
196
}
@@ -297,6 +299,12 @@ function isRightClickPan(pan: FlowOptions['panOnDrag'], usedButton: number) {
297
299
return usedButton === 2 && Array .isArray (pan ) && pan .includes (2 )
298
300
}
299
301
302
+ function wheelDelta(event : any ) {
303
+ const factor = event .ctrlKey && isMacOs () ? 10 : 1
304
+
305
+ return - event .deltaY * (event .deltaMode === 1 ? 0.05 : event .deltaMode ? 1 : 0.002 ) * factor
306
+ }
307
+
300
308
function viewChanged(prevViewport : ViewportTransform , eventTransform : ZoomTransform ) {
301
309
return (
302
310
(prevViewport .x !== eventTransform .x && ! isNaN (eventTransform .x )) ||
0 commit comments