Merge pull request #5443 from xyflow/fix/windows-scroll

chore(minimap): fix zooming on windows
This commit is contained in:
Moritz Klack
2025-08-12 12:49:12 +02:00
committed by GitHub
3 changed files with 13 additions and 6 deletions
+7
View File
@@ -0,0 +1,7 @@
---
'@xyflow/system': patch
'@xyflow/react': patch
'@xyflow/svelte': patch
---
Use 1 as the default for interactive Minimap zoom step
@@ -65,7 +65,7 @@ function MiniMapComponent<NodeType extends Node = Node>({
zoomable = false, zoomable = false,
ariaLabel, ariaLabel,
inversePan, inversePan,
zoomStep = 10, zoomStep = 1,
offsetScale = 5, offsetScale = 5,
}: MiniMapProps<NodeType>) { }: MiniMapProps<NodeType>) {
const store = useStoreApi<NodeType>(); const store = useStoreApi<NodeType>();
+5 -5
View File
@@ -2,6 +2,7 @@ import { type D3ZoomEvent, zoom } from 'd3-zoom';
import { select, pointer } from 'd3-selection'; import { select, pointer } from 'd3-selection';
import type { CoordinateExtent, PanZoomInstance, Transform } from '../types'; import type { CoordinateExtent, PanZoomInstance, Transform } from '../types';
import { isMacOs } from '../utils';
export type XYMinimapInstance = { export type XYMinimapInstance = {
update: (params: XYMinimapUpdate) => void; update: (params: XYMinimapUpdate) => void;
@@ -33,24 +34,23 @@ export function XYMinimap({ domNode, panZoom, getTransform, getViewScale }: XYMi
translateExtent, translateExtent,
width, width,
height, height,
zoomStep = 10, zoomStep = 1,
pannable = true, pannable = true,
zoomable = true, zoomable = true,
inversePan = false, inversePan = false,
}: XYMinimapUpdate) { }: XYMinimapUpdate) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const zoomHandler = (event: D3ZoomEvent<SVGSVGElement, any>) => { const zoomHandler = (event: D3ZoomEvent<SVGSVGElement, any>) => {
const transform = getTransform();
if (event.sourceEvent.type !== 'wheel' || !panZoom) { if (event.sourceEvent.type !== 'wheel' || !panZoom) {
return; return;
} }
const transform = getTransform();
const factor = event.sourceEvent.ctrlKey && isMacOs() ? 10 : 1;
const pinchDelta = const pinchDelta =
-event.sourceEvent.deltaY * -event.sourceEvent.deltaY *
(event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) * (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) *
zoomStep; zoomStep;
const nextZoom = transform[2] * Math.pow(2, pinchDelta); const nextZoom = transform[2] * Math.pow(2, pinchDelta * factor);
panZoom.scaleTo(nextZoom); panZoom.scaleTo(nextZoom);
}; };