diff --git a/.changeset/silly-beans-remain.md b/.changeset/silly-beans-remain.md new file mode 100644 index 00000000..42c8b49e --- /dev/null +++ b/.changeset/silly-beans-remain.md @@ -0,0 +1,5 @@ +--- +'@xyflow/react': patch +--- + +Prevent default scrolling behavior when nodes or a selection is moved with an arrow key press. diff --git a/packages/react/src/components/NodeWrapper/index.tsx b/packages/react/src/components/NodeWrapper/index.tsx index 5f528486..a54a4993 100644 --- a/packages/react/src/components/NodeWrapper/index.tsx +++ b/packages/react/src/components/NodeWrapper/index.tsx @@ -138,6 +138,9 @@ export function NodeWrapper({ nodeRef, }); } else if (isDraggable && node.selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) { + // prevent default scrolling behavior on arrow key press when node is moved + event.preventDefault(); + store.setState({ ariaLiveMessage: `Moved selected node ${event.key .replace('Arrow', '') diff --git a/packages/react/src/components/NodesSelection/index.tsx b/packages/react/src/components/NodesSelection/index.tsx index e2bcd238..ecaef17b 100644 --- a/packages/react/src/components/NodesSelection/index.tsx +++ b/packages/react/src/components/NodesSelection/index.tsx @@ -68,6 +68,8 @@ export function NodesSelection({ const onKeyDown = (event: KeyboardEvent) => { if (Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) { + event.preventDefault(); + moveSelectedNodes({ direction: arrowKeyDiffs[event.key], factor: event.shiftKey ? 4 : 1,