FuzeFront
▦
DO

Reorder values

Sort order is explicit and authored — never alphabetical by accident. A drop sends the full permutation of item ids, so the server never has to infer intent from a single moved row.

Sort Label (en) Code Status
⠿ United States US active
DROP HERE — position 2
⠿ United Kingdom GB active
⠿ Canada CA active

Drag is not the only way to reorder

The handle is focusable: Space lifts a row, ↑ / ↓ move it, Space drops, Esc cancels. Each move is announced in a live region. A pointer-only reorder would make the list uneditable by keyboard and screen-reader users.

States

Saving new order…

The new order is shown optimistically. Further drags are blocked until the save settles — two overlapping permutations would race.

Couldn't save the new order

The rows have been put back where they were — the frame never leaves an optimistic order on screen that the server rejected.

Order rejected — 400 VALIDATION_ERROR

The submitted ids were not a full permutation of this list's items — someone added or removed a value while you were dragging. The list has been reloaded.

Read-only for your role — 403 FORBIDDEN

Reordering needs update_value. For list-viewer and list-translator the handles are not rendered and rows are not draggable.

Test hooks: [data-frame='05-reorder'] · [data-reorderable='true'] · [data-dragging='true'] · [data-drop-target='true'] · [data-drag-handle] · [data-state='saving'] · [data-error='reorder-failed'] · [data-error='VALIDATION_ERROR'] · [data-error='FORBIDDEN'] · [data-note='reorder-a11y']
Contract: PUT /v1/selection-lists/{listId}/items/reorder body { item_ids: string[] } — a full permutation, not a delta.
Tokens only — no raw hex, spacing or type outside tokens.css / frame.css.

Review · selection-lists approve or reject each flow ↓
list-managementapproved · izzywdev
translation-workbenchapproved · izzywdev
access-controlapproved · izzywdev
pickerapproved · izzywdev