data
Sortable Data Rows
Structured data rows can be reordered without losing their columns or keyboard path.
- data
- table
- reorder
- drag
Live preview
Project brief
Updated today
Interaction audit
Updated yesterday
Release notes
Updated Friday
Quick usage
import { SortableDataRows } from "@pinky-ui/systems";
<SortableDataRows columns={columns} items={rows} onReorder={setRows} />Presets
Default
Restrained production behaviour.
Default behaviour
Quiet
Reduced intensity for dense product screens.
disabled={true}
Install
Add @pinky-ui/systems as a dependency, or use the CLI to copy this component's source directly into your project — no dependency to manage, fully editable.
npm install @pinky-ui/systemspnpm add @pinky-ui/systemsyarn add @pinky-ui/systemsnpx pinky-ui add sortable-data-rowsPrefer to run the whole repository locally instead?
git clone https://github.com/florash/Pinky-UI.git
cd Pinky-UI
npm install
npm run devProps
| Prop | Type | Default | Description |
|---|---|---|---|
| onReorder | (items: SortableDataRow[]) => void | — | Receives the new row order after drag or keyboard movement. |
| className | string | — | Styles the outer interaction surface. |
Accessibility
- Each row has a labelled reorder handle; Space grabs, arrows move and Space drops.
- Visible up/down buttons provide a touch-safe alternative to desktop drag.
Performance
- Native drag events and discrete reorder updates avoid a pointer-frame React loop.
Reduced motion
Motion resolves immediately while semantics, focus and state remain unchanged.
When to use
- Small to medium tables where order is part of the product model
When not to use
- Huge virtualized datasets or touch-only reorder surfaces
Skill
Purpose
Structured data rows can be reordered without losing their columns or keyboard path — order is part of the product model, not a decoration.
Good for
- Small to medium tables where order is part of the product model
Avoid for
- Huge virtualized datasets or touch-only reorder surfaces
Usage
<SortableDataRows columns={columns} items={rows} onReorder={setRows} />Accessibility
- Each row has a labelled reorder handle; Space grabs, arrows move and Space drops.
- Visible up/down buttons provide a touch-safe alternative to desktop drag.
Performance
- Native drag events and discrete reorder updates avoid a pointer-frame React loop.
Related: reorderable-list, expandable-data-row.