diff --git a/web/app/components/workflow/index.tsx b/web/app/components/workflow/index.tsx index 234f89912e..7a0a43f78b 100644 --- a/web/app/components/workflow/index.tsx +++ b/web/app/components/workflow/index.tsx @@ -314,6 +314,37 @@ export const Workflow: FC = memo(({ } }) + // Prevent browser zoom interactions from hijacking gestures meant for the workflow canvas + useEffect(() => { + const preventBrowserZoom = (event: WheelEvent) => { + if (!isCommentPreviewHovering) + return + + if (event.ctrlKey || event.metaKey) + event.preventDefault() + } + + const preventGestureZoom = (event: Event) => { + if (!isCommentPreviewHovering) + return + + event.preventDefault() + } + + window.addEventListener('wheel', preventBrowserZoom, { passive: false }) + const gestureEvents: Array<'gesturestart' | 'gesturechange' | 'gestureend'> = ['gesturestart', 'gesturechange', 'gestureend'] + gestureEvents.forEach((eventName) => { + window.addEventListener(eventName, preventGestureZoom, { passive: false }) + }) + + return () => { + window.removeEventListener('wheel', preventBrowserZoom) + gestureEvents.forEach((eventName) => { + window.removeEventListener(eventName, preventGestureZoom) + }) + } + }, [isCommentPreviewHovering]) + const { handleNodeDragStart, handleNodeDrag, @@ -536,7 +567,7 @@ export const Workflow: FC = memo(({ edgesFocusable={!nodesReadOnly} panOnScroll={false} panOnDrag={controlMode === ControlMode.Hand} - zoomOnPinch={!isCommentPreviewHovering} + zoomOnPinch={true} zoomOnScroll={true} zoomOnDoubleClick={true} isValidConnection={isValidConnection}