All components

Physics List

Headless sortable list with velocity-aware drag inertia, proximity collision displacement, stack compression, semantic motion presets, and full keyboard reordering.

Default
Weighted preset with proximity collision and keyboard sort (↑↓, Space, Escape).

Today's focus

Weighted preset with proximity collision and keyboard reorder (↑↓ focus · Space to pick up).

Sign in to view this example's source code.

Sign in
Stack mode
Stack compression with collision disabled - cards below the drag fan out and scale down.

Stack compression

Collision off so only stack depth is visible. Drag a card - items below fan out and scale down.

At rest the list is flush (gap 0). While dragging, cards below the active item compress with depth scaling - like peeling a deck. Try dragging the top task first.

Sign in to view this example's source code.

Sign in
Magnetic collision
Toggle proximity vs magnetic neighbor fields on the same weighted preset.

Collision modes

Same weighted preset - only the neighbor field changes. Drag slowly past nearby cards.

Wider, firmer field - neighbors react earlier and push further.

Sign in to view this example's source code.

Sign in
Motion presets
Compare soft, weighted, responsive, elastic, and inertial motion tokens side by side.

Motion presets

Each preset tunes springs, tilt, lift, and release behaviour - drag and release to feel the difference.

Weighted - Balanced default - slightly heavy springs, subtle lift.Subtle tiltNo release momentumTight reorder

Sign in to view this example's source code.

Sign in
No collision
Neighbors stay fixed during drag with collision disabled.

Clean reorder

Neighbors stay put during drag - no proximity displacement.

Sign in to view this example's source code.

Sign in

Props

NameTypeDefaultDescription
items / onReorderT[] / (items: T[]) => voidRequiredControlled list data and reorder callback
getItemId(item: T) => stringRequiredStable key extractor for each row
renderItem(item, state) => ReactNodeRequiredRow renderer; state includes index, dragging, keyboardGrabbed
dragHandleReactNodeundefined (built-in grip)Custom grip element; use showDragHandle={false} to hide
presetPhysicsMotionPreset"weighted"soft | weighted | responsive | elastic | inertial motion tokens
collision"proximity" | "magnetic" | "none""proximity"Neighbor displacement field during drag
stackbooleanfalseCompressed card-stack layout with depth scaling
classNames{ list?: string; item?: string }undefinedOptional class names for the list and row shells
disabledbooleanfalseDisables drag and keyboard pickup