Skip to Content
ReferenceComponents

<NodeResizer />

Source on GitHub

The <NodeResizer /> component can be used to add a resize functionality to your nodes. It renders draggable controls around the node to resize in all directions.

import { memo } from 'react'; import { Handle, Position, NodeResizer } from '@xyflow/react'; const ResizableNode = ({ data }) => { return ( <> <NodeResizer minWidth={100} minHeight={30} /> <Handle type="target" position={Position.Left} /> <div style={{ padding: 10 }}>{data.label}</div> <Handle type="source" position={Position.Right} /> </> ); }; export default memo(ResizableNode);

Props

For TypeScript users, the props type for the <NodeResizer /> component is exported as NodeResizerProps.

#nodeId?
string
#color?
string
#handleClassName?
string
#handleStyle?
#lineClassName?
string
#lineStyle?
#isVisible?
boolean
#minWidth?
number
#minHeight?
number
#maxWidth?
number
#maxHeight?
number
#keepAspectRatio?
boolean
#shouldResize?
(event: D3.DragEvent, params: ResizeParams & { direction: number[]; }) => boolean
#onResizeStart?
(event: D3.DragEvent, params: ResizeParams) => void
#onResize?
(event: D3.DragEvent, params: ResizeParams & { direction: number[]; }) => void
#onResizeEnd?
(event: D3.DragEvent, params: ResizeParams) => void

Examples

Head over to the example page to see how this is done.

import { ReactFlow, MiniMap, Background, BackgroundVariant, Controls, } from '@xyflow/react'; import ResizableNode from './ResizableNode'; import ResizableNodeSelected from './ResizableNodeSelected'; import CustomResizerNode from './CustomResizerNode'; import '@xyflow/react/dist/style.css'; const nodeTypes = { ResizableNode, ResizableNodeSelected, CustomResizerNode, }; const initialNodes = [ { id: '1', type: 'ResizableNode', data: { label: 'NodeResizer' }, position: { x: 0, y: 50 }, }, { id: '2', type: 'ResizableNodeSelected', data: { label: 'NodeResizer when selected' }, position: { x: 100, y: 300 }, }, { id: '3', type: 'CustomResizerNode', data: { label: 'Custom Resize Icon' }, position: { x: 150, y: 150 }, style: { height: 100, }, }, ]; const initialEdges = []; export default function NodeToolbarExample() { return ( <ReactFlow defaultNodes={initialNodes} defaultEdges={initialEdges} minZoom={0.2} maxZoom={4} fitView nodeTypes={nodeTypes} style={{ backgroundColor: "#F7F9FB" }} > <Background variant={BackgroundVariant.Dots} /> <MiniMap /> <Controls /> </ReactFlow> ); }

Custom Resize Controls

To build custom resize controls, you can use the NodeResizeControl component and customize it.

Notes

  • Take a look at the docs for the NodeProps type or the guide on custom nodes to see how to implement your own nodes.
Last updated on