Interactive Demo

Drag between trees with configurable drop zones

Demo
Source (drag from here)
Target (drop here) - Trash only accepts 'child'
Controls
Features
Drop Positions
  • above - Insert as sibling before
  • below - Insert as sibling after
  • child - Insert as child
Key Props
  • dropZoneMode - 'glow' | 'floating'
  • allowCopy - Enable Ctrl+drag
  • orderMember - Sibling sort order
Touch Support

Long-press (300ms) to drag on mobile.

Advanced Features

Restricted positions, async callbacks, and dynamic rules

Demo
Try: 🗑️ Trash = child only | 📁 Folder = all | 📄 File = above/below only
Code
Restricted Positions & Async
 
Details
allowedDropPositions

Restrict which positions are valid per node:

  • ['child'] - Trash folders
  • ['above', 'below'] - Files (no nesting)
  • undefined - All allowed (default)
Two Ways to Set
  • allowedDropPositionsMember - Static from data
  • getAllowedDropPositionsCallback - Dynamic logic
beforeDropCallback

Async validation before drop. Return false to cancel, or modify position/operation.

API Reference

All drag & drop related properties

Properties
PropTypeDescription
dropZoneMode'glow' | 'floating'Visual style for drop indicators
dropZoneLayoutstringFloating layout: around, above, below, wave, wave2
allowCopybooleanEnable Ctrl+drag to copy
autoHandleCopybooleanAuto-handle same-tree copy (default: true)
dragDropModestringnone | self | cross | both
orderMemberstringData property for sibling sort order
allowedDropPositionsMemberstringData property for allowed positions array
getAllowedDropPositionsCallbackfunctionDynamic allowed positions per node
Events
EventParameters
onNodeDragStart(node, event)
onNodeDragOver(node, event)
beforeDropCallback(dropNode, draggedNode, position, event, operation) → bool | Promise
onNodeDrop(dropNode, draggedNode, position, event, operation)
Position: 'above' | 'below' | 'child'
Operation: 'move' | 'copy'
Data Properties
Data PropertyTypeDescription
isDraggablebooleanCan this node be dragged?
isDropAllowedbooleanCan drop on this node?
allowedDropPositionsDropPosition[]['above', 'below', 'child']
Tip: Use isDraggableMember and isDropAllowedMember props to map custom property names.