DnD Kit
VendorDrag-and-drop primitives for sortable lists and Kanban boards.
Installation
pnpm add @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities
Usage
import {
DndContext,
SortableContext,
SortableItem,
arrayMove,
verticalListSortingStrategy,
} from "@/components/vendor/dnd-kit"
function MyList() {
const [items, setItems] = useState([...])
function handleDragEnd(event) {
const { active, over } = event
if (over && active.id !== over.id) {
setItems((items) => {
const oldIndex = items.findIndex((i) => i.id === active.id)
const newIndex = items.findIndex((i) => i.id === over.id)
return arrayMove(items, oldIndex, newIndex)
})
}
}
return (
<DndContext onDragEnd={handleDragEnd}>
<SortableContext items={items.map(i => i.id)}>
{items.map((item) => (
<SortableItem key={item.id} id={item.id}>
{item.name}
</SortableItem>
))}
</SortableContext>
</DndContext>
)
}Examples
Components
DndContext
Wraps your draggable area. Provides sensors for pointer and keyboard interaction.
onDragEnd — Required. Called when item is dropped.onDragStart — Optional. Called when dragging starts.onDragOver — Optional. Called during drag over drop zones.collisionDetection — Algorithm for detecting drops. Default: closestCorners.SortableContext
Defines a sortable list. Wrap your sortable items in this.
items — Array of unique identifiers.strategy — Sorting strategy (vertical, horizontal, or rect).SortableItem
Individual draggable item with built-in drag styles.
id — Unique identifier for this item.disabled — Disable dragging for this item.as — Render as a different element (default: div).