Drag & Drop List

Virtualized, multi-select drag-and-drop list. Try clicking, shift-clicking, dragging, and using keyboard shortcuts. See spec.

Interactions

ActionmacOSWindows / Linux
Select itemClick
Extend selectionShift + Click
Toggle itemCmd + ClickCtrl + Click
NavigateArrow Up / Down
Extend with keyboardShift + Arrow
Move selectionCmd + ArrowCtrl + Arrow
Select first / lastOption + ArrowAlt + Arrow
DragClick & hold, then drag
Clear selectionEscape

Usage

import { register, DndSource } from "@primavera-ui/components/dnd";
register();
const items = [
{ key: "1", label: "Item 1" },
{ key: "2", label: "Item 2" },
{ key: "3", label: "Item 3" },
];
const keyIndex = new Map(items.map((i) => [i.key, i]));
const source = new DndSource({
getKey: (item) => item.key,
getOrder: () => items.map((i) => i.key),
getItem: (key) => keyIndex.get(key),
});
const renderer = {
mount(key, item, container) {
container.textContent = item.label;
return () => {};
},
};
const el = document.querySelector("primavera-dnd");
el.setSource(source);
el.setRenderer(renderer);