Skip to content

RowDragDropConfig

Configuration for RowDragDropPlugin.

All keys not annotated as “cross-grid” are identical in name and default to RowReorderConfig, so migration is new RowReorderPlugin(cfg)new RowDragDropPlugin(cfg) with zero changes.

PropertyTypeDescription
enableKeyboard?booleanEnable keyboard shortcuts (Ctrl + ↑ / Ctrl + ↓) for moving rows. Keyboard moves are intra-grid only.
showDragHandle?booleanShow a drag handle column.
dragFrom?row | handle | bothWhere on a row a drag can be initiated.
dragHandlePosition?left | rightPosition of the drag handle column.
dragHandleWidth?numberWidth of the drag handle column in pixels.
debounceMs?numberDebounce time in milliseconds for rapid keyboard moves. Events are batched and emitted after this delay.
animation?false | flipAnimation type for row movement. - false: instant reorder - 'flip': FLIP animation (slides rows smoothly)
canDrag?(row: T, index: number) => booleanValidation callback invoked once at dragstart (and on intra-grid keyboard moves) to decide whether a row can be picked up. Replaces RowReorderConfig.canMove for the dragstart side.
canMove?(row: T, fromIndex: number, toIndex: number, direction: up | down) => boolean⚠️
dropZone?stringShared zone identifier. Two grids that opt into the same zone may exchange rows. Omit to behave exactly like the legacy RowReorderPlugin — intra-grid only, no cross-grid affordances.
operation?copy | moveCross-grid drop semantics. - 'move' (default): the row is removed from the source grid’s _rows and inserted into the target. - 'copy': the source _rows is unchanged; the target inserts a copy.
canDrop?(payload: RowDragPayload<T>, targetIndex: number) => booleanValidation callback invoked during dragover (same-window) and at drop time to decide whether a drop should be accepted at targetIndex.
serializeRow?(row: T) => unknownOptional row transformer applied when a row leaves this grid in a cross-window / cross-iframe drag (i.e. when the WeakRef live-reference path cannot be used). Use to strip internal IDs or rename fields before the row crosses a security boundary.
deserializeRow?(raw: unknown) => TOptional row transformer applied when a row lands in this grid via a cross-window / cross-iframe drag. Use to assign new IDs or remap fields.
autoScroll?boolean | objectAuto-scroll the target grid when the cursor approaches its viewport top or bottom edge during drag.

Default: true


Show a drag handle column.

Defaults to true when dragFrom is 'handle' (the default) or 'both', and to false when dragFrom is 'row' — when the entire row is the drag handle, the dedicated grip column adds no value. Set explicitly to override.

Default: true (or false when dragFrom: ‘row’)


Where on a row a drag can be initiated.

  • 'handle' (default): only the grip column starts a drag. Backwards compatible with RowReorderPlugin.
  • 'row': any cell starts a drag, and the grip column is hidden by default. Recommended for transfer-list / kanban-style UIs where a dedicated handle adds visual noise.
  • 'both': either the grip OR any cell starts a drag.

Drags initiated on interactive descendants (inputs, buttons, anchors, contenteditable, open cell editors, selection checkboxes) are always suppressed regardless of this setting so native interactions keep working.

Default: 'handle'


Default: 'left'


Default: 40


Default: 150


Default: 'flip'


Cross-grid drop semantics.

  • 'move' (default): the row is removed from the source grid’s _rows and inserted into the target.
  • 'copy': the source _rows is unchanged; the target inserts a copy.

The user’s input sourceRows array is never mutated on either side — persistence is consumer-driven via the row-transfer event.

Default: 'move'


Auto-scroll the target grid when the cursor approaches its viewport top or bottom edge during drag.

  • true (default): enable with the default tuning (edgeSize: 60, speed: 8, maxSpeed: 24).
  • false: disabled.
  • object: overrides any of the tuning fields.

Default: true


AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://raw.githubusercontent.com/OysteinAmundsen/toolbox/main/llms-full.txt