Merge pull request #5443 from xyflow/fix/windows-scroll
chore(minimap): fix zooming on windows
This commit is contained in:
@@ -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>();
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user