@app-studio/components
Drag and Drop
A drag-and-drop component for reordering items with touch and mouse support.
View component sourceImport
ts
import { DragAndDrop } from '@app-studio/components';New to the library? Complete installation and provider setup first.
Interactive examples
Try the component, then open Code to copy the complete example.
import React from 'react';
import { Horizontal, Text, View } from 'app-studio';
import { DragAndDrop } from '@app-studio/components';
const tasks = [
{ id: 1, title: 'Design review', color: 'color-blue-500' },
{ id: 2, title: 'Write tests', color: 'color-green-500' },
{ id: 3, title: 'Ship release', color: 'color-purple-500' },
];
export const CardsDragAndDrop = () => (
<DragAndDrop
items={tasks}
onChange={(next) => console.log('order', next)}
itemProps={{ marginBottom: 8 }}
renderItem={(item: (typeof tasks)[number]) => (
<Horizontal
alignItems="center"
gap={10}
padding={12}
borderRadius={10}
backgroundColor="color-white"
borderWidth={1}
borderStyle="solid"
borderColor="color-gray-200"
>
<View
widthHeight={10}
borderRadius={999}
backgroundColor={item.color}
/>
<Text color="color-gray-800" fontWeight="600">
{item.title}
</Text>
</Horizontal>
)}
/>
);Props
Required props are marked below. A dash indicates an unspecified default. Design system configuration can override implementation defaults.
Scroll horizontally to see every column.
| Prop | Type | Default | Description |
|---|---|---|---|
items Required | any[] | — | Items displayed by the component.Source |
onChange | ((items: any[]) => void) | — | Called with the new field value. Check the signature for the exact payload.Source |
renderItem | ((item: any, index: number) => React.ReactNode) | — | See the type and source declaration for this property.Source |
containerProps | ViewProps | — | See the type and source declaration for this property.Source |
itemProps | ViewProps | — | See the type and source declaration for this property.Source |
For shared layout, color, and responsive properties, read Styling & composition and Responsive layouts. Additional native element attributes depend on the target platform.
Usage guidance
- Give controls a visible label or an accessible name, and verify keyboard interaction. See Accessibility.
- For controlled inputs, update the value from the callback shown in the props table. Keep application state in your component or form library.
- These previews run in the browser. Check React Native setup for platform requirements and differences.