From 397f9c9d55a5d60212b76de16565c7ee71be5e1c Mon Sep 17 00:00:00 2001 From: weige <772752726@qq.com> Date: Wed, 27 May 2026 10:55:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmac=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/WorkflowCanvas.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/WorkflowCanvas.tsx b/src/components/WorkflowCanvas.tsx index 123a0032..3f278d7e 100644 --- a/src/components/WorkflowCanvas.tsx +++ b/src/components/WorkflowCanvas.tsx @@ -321,9 +321,6 @@ const getQuickAddSource = (node: Node, edges: Edge[]): { handleId: string; handl return outputHandle && handleType ? { handleId: outputHandle, handleType } : null; }; -// Detect if running on macOS for platform-specific trackpad behavior -const isMacOS = typeof navigator !== 'undefined' && /Mac|iPod|iPhone|iPad/.test(navigator.platform); - // Detect if a wheel event is from a mouse (vs trackpad) const isMouseWheel = (event: WheelEvent): boolean => { // Mouse scroll wheel typically uses deltaMode 1 (lines) or has large discrete deltas @@ -448,6 +445,11 @@ export function WorkflowCanvas() { const [isSplitting, setIsSplitting] = useState(false); const [isBuildingWorkflow, setIsBuildingWorkflow] = useState(false); const [showNewProjectSetup, setShowNewProjectSetup] = useState(false); + const [isMacOSClient, setIsMacOSClient] = useState(false); + + useEffect(() => { + setIsMacOSClient(/Mac|iPod|iPhone|iPad/.test(navigator.platform)); + }, []); useEffect(() => { let cancelled = false; @@ -1884,7 +1886,7 @@ export function WorkflowCanvas() { } // On macOS, differentiate trackpad from mouse - if (isMacOS) { + if (isMacOSClient) { if (isMouseWheel(event)) { // Mouse wheel → zoom if settings allow if (shouldZoom) { @@ -1925,7 +1927,7 @@ export function WorkflowCanvas() { return () => { wrapper.removeEventListener('wheel', handleWheelNonPassive); }; - }, [isModalOpen, zoomIn, zoomOut, getViewport, setViewport, canvasNavigationSettings]); + }, [isMacOSClient, isModalOpen, zoomIn, zoomOut, getViewport, setViewport, canvasNavigationSettings]); // Keyboard shortcuts for copy/paste and stacking selected nodes const handleKeyDown = useCallback((event: KeyboardEvent) => { @@ -2552,7 +2554,7 @@ export function WorkflowCanvas() { ? false : canvasNavigationSettings.panMode === "always" ? false - : isMacOS && !isModalOpen + : isMacOSClient && !isModalOpen } selectionKeyCode={ isModalOpen ? null @@ -2569,7 +2571,7 @@ export function WorkflowCanvas() { ? true : canvasNavigationSettings.panMode === "middleMouse" ? [2] - : !isMacOS + : !isMacOSClient } selectNodesOnDrag={false} nodeDragThreshold={5}