Skip to content

Commit 67704e5

Browse files
committed
fix(core): use os specific key defaults
1 parent 8943ec7 commit 67704e5

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

packages/core/src/container/Viewport/Viewport.vue

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { useEventListener, useResizeObserver } from '@vueuse/core'
77
import type { CoordinateExtent, D3ZoomHandler, FlowOptions, ViewportTransform } from '../../types'
88
import { PanOnScrollMode } from '../../types'
99
import { useKeyPress, useVueFlow, useWindow } from '../../composables'
10-
import { ErrorCode, VueFlowError, clamp, getDimensions } from '../../utils'
10+
import { ErrorCode, VueFlowError, clamp, getDimensions, isMacOs } from '../../utils'
1111
import Pane from '../Pane/Pane.vue'
1212
import Transform from './Transform.vue'
1313
@@ -92,6 +92,7 @@ onMounted(() => {
9292
9393
const constrainedTransform = d3Zoom.constrain()(updatedTransform, extent, translateExtent.value)
9494
d3Zoom.transform(d3Selection, constrainedTransform)
95+
d3Zoom.wheelDelta(wheelDelta)
9596
9697
storeD3Zoom.value = d3Zoom
9798
storeD3Selection.value = d3Selection
@@ -183,12 +184,13 @@ onMounted(() => {
183184
184185
const currentZoom = d3Selection.property('__zoom').k || 1
185186
186-
if (event.ctrlKey && zoomOnPinch.value) {
187+
if (event.ctrlKey && zoomOnPinch.value && isMacOs()) {
187188
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)
190190
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)
192194
193195
return
194196
}
@@ -297,6 +299,12 @@ function isRightClickPan(pan: FlowOptions['panOnDrag'], usedButton: number) {
297299
return usedButton === 2 && Array.isArray(pan) && pan.includes(2)
298300
}
299301
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+
300308
function viewChanged(prevViewport: ViewportTransform, eventTransform: ZoomTransform) {
301309
return (
302310
(prevViewport.x !== eventTransform.x && !isNaN(eventTransform.x)) ||

packages/core/src/store/state.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
StepEdge,
1212
StraightEdge,
1313
} from '~/components'
14-
import { isDef } from '~/utils'
14+
import { isDef, isMacOs } from '~/utils'
1515

1616
export const defaultNodeTypes: DefaultNodeTypes = {
1717
input: InputNode,
@@ -107,8 +107,8 @@ function defaultState(): State {
107107
selectNodesOnDrag: true,
108108
multiSelectionActive: false,
109109
selectionKeyCode: 'Shift',
110-
multiSelectionKeyCode: 'Meta',
111-
zoomActivationKeyCode: 'Meta',
110+
multiSelectionKeyCode: isMacOs() ? 'Meta' : 'Control',
111+
zoomActivationKeyCode: isMacOs() ? 'Meta' : 'Control',
112112
deleteKeyCode: 'Backspace',
113113
panActivationKeyCode: 'Space',
114114

packages/core/src/utils/general.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ export function isBoolean(val: any): val is boolean {
2828
export function isNumber(val: any): val is number {
2929
return typeof val === 'number'
3030
}
31+
32+
export const isMacOs = () => typeof navigator !== 'undefined' && navigator?.userAgent?.indexOf('Mac') >= 0

0 commit comments

Comments
 (0)