Drag & drop
A reusable drag-and-drop context: wrap a surface in a DragDropProvider, mark droppable regions with DropZone, and make items draggable with Draggable plus a DragHandle grip.
Items lift into a floating ghost and reorder within or across zones, position-aware. It runs on iOS, Android, and the web from one PanResponder + Animated code path, and the grip is keyboard- and screen-reader-operable: press Space to grab, the arrow keys to move, Space to drop, Escape to cancel.
The reading direction is respected throughout. In a right-to-left locale a horizontal zone lays its items out right to left, so the first position is the rightmost one, the drop indicator meets the row's right edge, and the two horizontal arrows swap roles (Left Arrow moves forward, Right Arrow back, per the WAI-ARIA practices). Vertical lists and the up/down arrows read the same way in both directions.
Design review
Write the tests
Ship the release
iOS
Design review
Write the tests
Ship the release
Android
Design review
Write the tests
Ship the release
Web
tsx
Default
Locked item
Between columns
Props
DragDropProvider
DropZone
Draggable
DragHandle
Do & Don’t
Grip and fallback
Don’t
Don't make a bare card the only drag surface with no grip and no alternative: whole-card dragging fights taps and scrolling, and it leaves keyboard and screen-reader users with no way to move the item at all.
Do
Design review
Give each item a labeled DragHandle and keep a non-drag way to move it. The grip is a keyboard tab stop that grabs on Space and moves with the arrows; a RowMenu "Move to" beside it is a good extra path for pointer and assistive-tech users.